2016-01-09 60 views
0

這裏是我的代碼目前看起來具有特定長度,如: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(例如15個數字只有一個0,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));