    function SizeStyleStrFor(AStyle: TSizeStyle): WideString;
    begin
      case AStyle of
        ssBytes:
          result := 'bytes'
        ssKiloBytes:
          result := 'KB'
        ssMegaBytes:
          result := 'MB'
        ssGigaBytes:
          result := 'GB'
        ssTerraBytes:
          result := 'TB'
        else
          result := '';
      end;

    end;

    function GetSizeString (ASize: Int64; SizeStyle: TSizeStyle; AddStyleIndicator: Boolean): WideString;
    const
      cKilo = 1024;
    var
      ATemp: Extended;
    begin
      result := '';

      if SizeStyle = ssChoose then
      begin
        if ASize > ((cKilo * cKilo * cKilo) * cKilo) then
          SizeStyle := ssTerraBytes
        else if ASize > (1024 * cKilo * cKilo) then
          SizeStyle := ssGigaBytes
        else if ASize > (cKilo * cKilo) then
          SizeStyle := ssMegaBytes
        else if ASize > (cKilo) then
          SizeStyle := ssKiloBytes
        else
          SizeStyle := ssBytes;
      end;

      case SizeStyle of
        ssKiloBytes:
          ATemp := (ASize / cKilo);
        ssMegaBytes:
          ATemp := (ASize / (cKilo * cKilo));
        ssGigaBytes:
          ATemp := (ASize / (cKilo * cKilo * cKilo));
        ssTerraBytes:
          ATemp := (ASize / ((cKilo * cKilo * cKilo) * cKilo));
        else
          ATemp := ASize;
      end;

      result := WideString(FormatFloat ('#,##0.#', ATemp));

      if AddStyleIndicator and (SizeStyleStrFor(SizeStyle) <> '') then
        result := result + ' ' + SizeStyleStrFor(SizeStyle);
    end;


var
  i: Integer;
  AImage: TImageItem;
  ASum: Int64;
begin
  ASum := 0;
  for i := 0 to Selected.Count - 1 do
  begin
    AImage := Selected.Items[i];
    ASum := ASum + AImage.FileSize;
  end;
  Say2(
        IntToStr(Selected.Count) + ' selected files with a total file size of',
        GetSizeString(ASum, ssChoose, True)
      );
end;
