2016-01-09 3 views
0

Вот что в настоящее время выглядит мой код, как:Inno Setup - Pad строка для определенной длины с нулями

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 и т. Д.). Какая функция могла бы это сделать?

ответ

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));