Inno Setup - Подпълнете низ до определена дължина с нули

Ето как изглежда моят код в момента:

var
  Page: TInputQueryWizardPage;

procedure IDKeyPress(Sender: TObject; var Key: Char);
var
  KeyCode: Integer;
begin
  KeyCode := Ord(Key);
  if not ((KeyCode = 8) or ((KeyCode >= 48) and (KeyCode <= 57))) then
    Key := #0;
end;

Procedure InitializeWizard();
Begin
Page := CreateInputQueryPage(blahblah);
  Page.Add('Profile ID:', False);
  Page.Edits[0].MaxLength := 16;
  Page.Edits[0].OnKeyPress := @IDKeyPress;
  Page.Values[0] := '0000000000000000';
End;

procedure WriteUserInput;
var
A: AnsiString;
U: String;
begin
    LoadStringFromFile(ExpandConstant('{app}\prefs.ini'), A);
    U := A;
    StringChange(U, '0000000000000000', Page.Values[0]);
    A := U;
    SaveStringToFile(ExpandConstant('{app}\prefs.ini'), A, False);
end;

procedure CurStepChanged(CurStep: TSetupStep);
Begin
if  CurStep=ssPostInstall then
  begin
    WriteUserInput;
  end
End;

Сега това, което трябва да направя от Inno, е да оставя въведеното от потребителя такова, каквото е, ако вече е 16 цифри, запълване с 0 в края, ако е по-малко от 16 (напр. само една 0, ако е 15 цифри, две, ако е 14, и т.н.). Коя функция би могла да направи това?


person George Hovhannisian    schedule 09.01.2016    source източник


Отговори (1)


Обща функция за допълване отдясно на низ до определена дължина с даден знак:

function PadStr(S: string; C: Char; I: Integer): string;
begin
  Result := S + StringOfChar(C, I - Length(S));
end;

За вашите конкретни нужди използвайте:

StringChange(U, '0000000000000000', PadStr(Page.Values[0], '0', 16));

Ако имате нужда от подпълване по време на компилиране (в препроцесора), вижте Как да подпълнете компонентите на версията с нули за OutputBaseFilename в Inno Настройка.

person Martin Prikryl    schedule 10.01.2016