Есть скрипт. В нем я сделал вывод размера программы в байтах, килобайтах, мегабайтах и т.д. Как вырезать лишние пробелы для значений в строке SpaceComponentsLabel.Caption. Пытался юзать Trim(); но не работает.
т.е. нужно убрать пробелы между цифрами:
Но Trim(); и ему подобные функции не дают должного результата.
Код:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
[Components]
Name: a; Description: 1; ExtraDiskSpaceRequired: 2641404888; Types: full;
Name: b; Description: 2; ExtraDiskSpaceRequired: 26214400; Types: full
Name: c; Description: 3; ExtraDiskSpaceRequired: 41943040; Types: full
[Code]
var
OldCompListOnClickCheckProc: TNotifyEvent;
SpaceComponentsLabel: TLabel;
DiskSpace: Extended;
function GetFloatFormText(const UndefText: String): Extended;
var
i: Integer;
ss: string;
begin
for i := 1 to Length(UndefText) do
case UndefText[i] of
'0','1','2','3','4','5','6','7','8','9': ss := ss + UndefText[i];
',': ss := ss + '.';
end;
Result:= StrToFloat(Trim(ss));
end;
function NumToStr(Float: Extended): string;
begin
Result:= Format('%.2n', [Float]);
StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Pos('.', Result) > 0) do
SetLength(Result, Length(Result)-1);
end;
function ToByte(Float: Extended): string;
begin
Result:= NumToStr(Float*1048576);
end;
function ToKB(Float: Extended): string;
begin
Result:= NumToStr(Float*1024);
end;
function ToMB(Float: Extended): string;
begin
Result:= NumToStr(Float);
end;
function ToGB(Float: Extended): string;
begin
Result:= NumToStr(Float/1024);
end;
function ToTB(Float: Extended): string;
begin
Result:= NumToStr(Float/(1024*1024));
end;
procedure ComponentsListOnClickCheck(Sender: TObject);
begin
OldCompListOnClickCheckProc(TNewCheckListBox(Sender));
DiskSpace:= GetFloatFormText(WizardForm.ComponentsDiskSpaceLabel.Caption)-GetFloatFormText(WizardForm.DiskSpaceLabel.Caption);
SpaceComponentsLabel.Caption := 'Б: '+ToByte(DiskSpace)+' | КБ: '+ToKB(DiskSpace)+' | МБ: '+ToMB(DiskSpace)+' | ГБ: '+ToGB(DiskSpace)+' | ТБ: '+ToTB(DiskSpace);
end;
procedure InitializeWizard();
var
i: Integer;
k: Array [0..99] of Boolean;
begin
WizardForm.ComponentsDiskSpaceLabel.Hide;
OldCompListOnClickCheckProc := WizardForm.ComponentsList.OnClickCheck;
for i:=0 to WizardForm.ComponentsList.ItemCount-1 do
if WizardForm.ComponentsList.Checked[i] then
k[i]:= True;
for i:=0 to WizardForm.ComponentsList.ItemCount-1 do
WizardForm.ComponentsList.Checked[i]:= False;
WizardForm.ComponentsList.OnClickCheck(nil);
for i:=0 to WizardForm.ComponentsList.ItemCount-1 do
WizardForm.ComponentsList.Checked[i]:= k[i];
OldCompListOnClickCheckProc(nil);
WizardForm.ComponentsList.OnClickCheck := @ComponentsListOnClickCheck;
SpaceComponentsLabel:= TLabel.Create(nil);
with SpaceComponentsLabel do
begin
Parent := WizardForm.SelectComponentsPage;
SetBounds(ScaleX(WizardForm.ComponentsDiskSpaceLabel.Left), ScaleY(WizardForm.ComponentsDiskSpaceLabel.Top), ScaleX(WizardForm.ComponentsDiskSpaceLabel.Width), ScaleY(WizardForm.ComponentsDiskSpaceLabel.Height));
AutoSize := False;
Font.Style := [fsBold];
end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
wpSelectComponents: ComponentsListOnClickCheck(WizardForm.ComponentsList);
end;
end;
т.е. нужно убрать пробелы между цифрами:
Но Trim(); и ему подобные функции не дают должного результата.
Последнее редактирование: