2010-07-09 35 views
14

Sto utilizzando Inno Setup (è fantastico!). Speravo di personalizzare l'installazione in modo da poter accettare una stringa da parte dell'utente sotto forma di un campo di input e magari aggiungere un messaggio ad esso.Inno Setup: Aggiungi un campo di inserimento personalizzato

Come posso fare questo? Ho dato un'occhiata attraverso i documenti, la ricerca su google e non è venuto fuori molto!

Grazie a tutti per qualsiasi aiuto

+0

Ho impiegato un po 'di tempo per controllare tutti i collegamenti falsi e non funzionanti per trovare isfd208.exe (InnoSetup Form Designer 2.08). Come ha detto Thorsten, il collegamento originale è rotto ma [questo] (http://uploaded.to/file/swq33y) funziona alla data di questo commento. (Nota: non funziona su Windows 7 ma funziona su xp) – Joe

+0

Anche il collegamento di Joe è interrotto. Eccone uno funzionante: [http://www.cenadep.org/2012/02/09/innosetup-form-designer/](http://www.cenadep.org/2012/02/09/innosetup- form-designer /) –

risposta

34

È possibile utilizzare Pascal scripting in InnoSetup per creare nuove pagine per l'installatore. Queste pagine possono essere integrate nel normale flusso di installazione. Questo è ben documentato in InnoSetup documentation (la ricerca di Google dovrebbe anche venire con campioni). Anche la cartella Samples all'interno di Program Files \ InnoSetup contiene alcuni esempi di codice.

Qualche tempo fa, c'era un software chiamato InnoSetup Form designer, che permetteva di progettare visivamente la pagina. Il collegamento è ancora lì, ma nella pagina non ho trovato il download. Forse se ti guardi intorno puoi trovarlo?

EDIT
Questo è un esempio di una pagina che ho fatto una volta. . Questa è la sezione di codice del file ISS [Codice]

var 
    EnableFolderPage: Boolean; 
    lblBlobFileFolder: TLabel; 
    lblBlobFileWarning1: TLabel; 
    lblBlobFileWarning2: TLabel; 
    tbBlobFileFolder: TEdit; 
    btnBlobFileFolder: TButton; 



function GetBlobFolder(param: String): String; 
begin 
    Result := Trim(tbBlobFileFolder.Text); 
end; 


{ BlobFileForm_Activate } 
procedure BlobFileForm_Activate(Page: TWizardPage); 
var 
    s: string; 
begin 
    s := Trim(tbBlobFileFolder.Text); 
    if (s = '') then 
    begin 
    tbBlobFileFolder.Text := ExpandConstant('{sys}'); 
    end; 
end; 


{ BlobFileForm_NextButtonClick } 
function BlobFileForm_NextButtonClick(Page: TWizardPage): Boolean; 
var 
    s: string; 
begin 
    s := Trim(tbBlobFileFolder.Text); 
    if (s = '') then 
    begin 
    MsgBox(ExpandConstant('{cm:BlobFileForm_NoFolder}'), mbError, MB_OK); 
    Result := false; 
    end else 
    begin 
    if not DirExists(s) then 
    begin 
     MsgBox(ExpandConstant('{cm:BlobFileForm_DirDoesntExist}'), mbError, MB_OK); 
     Result := false; 
    end else 
    begin 
     Result := True; 
    end; 
    end; 
end; 

procedure btnBlobFileFolder_Click(sender: TObject); 
var 
    directory: string; 
begin 
    if BrowseForFolder('', directory, true) then 
    begin 
    tbBlobFileFolder.Text := directory; 
    end; 
end; 


{ BlobFileForm_CreatePage } 
function BlobFileForm_CreatePage(PreviousPageId: Integer): Integer; 
var 
    Page: TWizardPage; 
begin 
    Page := CreateCustomPage(
    PreviousPageId, 
    ExpandConstant('{cm:BlobFileForm_Caption}'), 
    ExpandConstant('{cm:BlobFileForm_Description}') 
); 

{ lblBlobFileFolder } 
    lblBlobFileFolder := TLabel.Create(Page); 
    with lblBlobFileFolder do 
    begin 
    Parent := Page.Surface; 
    Caption := ExpandConstant('{cm:BlobFileForm_lblBlobFileFolder_Caption0}'); 
    Left := ScaleX(8); 
    Top := ScaleY(8); 
    Width := ScaleX(167); 
    Height := ScaleY(13); 
    end; 

    { lblBlobFileWarning1 } 
    lblBlobFileWarning1 := TLabel.Create(Page); 
    with lblBlobFileWarning1 do 
    begin 
    Parent := Page.Surface; 
    Caption := ExpandConstant('{cm:BlobFileForm_lblBlobFileWarning1_Caption0}'); 
    Left := ScaleX(8); 
    Top := ScaleY(80); 
    Width := ScaleX(50); 
    Height := ScaleY(13); 
    Font.Color := -16777208; 
    Font.Height := ScaleY(-11); 
    Font.Name := 'Tahoma'; 
    Font.Style := [fsBold]; 
    end; 

    { lblBlobFileWarning2 } 
    lblBlobFileWarning2 := TLabel.Create(Page); 
    with lblBlobFileWarning2 do 
    begin 
    Parent := Page.Surface; 
    Caption := 
     ExpandConstant('{cm:BlobFileForm_lblBlobFileWarning2_Caption0}') + #13 + 
     ExpandConstant('{cm:BlobFileForm_lblBlobFileWarning2_Caption1}') + #13 + 
     ExpandConstant('{cm:BlobFileForm_lblBlobFileWarning2_Caption2}') + #13 + 
     ExpandConstant('{cm:BlobFileForm_lblBlobFileWarning2_Caption3}') + #13 + 
     ExpandConstant('{cm:BlobFileForm_lblBlobFileWarning2_Caption4}'); 
    Left := ScaleX(8); 
    Top := ScaleY(96); 
    Width := ScaleX(399); 
    Height := ScaleY(133); 
    AutoSize := False; 
    WordWrap := True; 
    end; 

    { tbBlobFileFolder } 
    tbBlobFileFolder := TEdit.Create(Page); 
    with tbBlobFileFolder do 
    begin 
    Parent := Page.Surface; 
    Left := ScaleX(8); 
    Top := ScaleY(24); 
    Width := ScaleX(401); 
    Height := ScaleY(21); 
    TabOrder := 0; 
    end; 

    { btnBlobFileFolder } 
    btnBlobFileFolder := TButton.Create(Page); 
    with btnBlobFileFolder do 
    begin 
    Parent := Page.Surface; 
    Caption := ExpandConstant('{cm:BlobFileForm_btnBlobFileFolder_Caption0}'); 
    Left := ScaleX(320); 
    Top := ScaleY(48); 
    Width := ScaleX(91); 
    Height := ScaleY(23); 
    TabOrder := 1; 
    end; 

    with Page do 
    begin 
    OnActivate := @BlobFileForm_Activate; 
    OnNextButtonClick := @BlobFileForm_NextButtonClick; 
    end; 

    with btnBlobFileFolder do 
    begin 
    OnClick := @btnBlobFileFolder_Click; 
    end; 

    Result := Page.ID; 
end; 


procedure InitializeWizard(); 
begin 
    BlobFileForm_CreatePage(wpSelectDir); 
end; 

EDIT 2
Per scrivere il valore immesso dall'utente ad una chiave di registro, creare una nuova funzione:

function GetUserEnteredText(param: String): String; 
begin 
    Result := Trim(tbTextBox.Text); 
end; 

Questa funzione restituisce semplicemente ciò che è stato inserito nella casella di testo. Si noti che la funzione deve avere un parametro stringa - anche se lo si ignora!

Nella sezione [Registry] dello script, dichiarare la chiave che dovrebbe essere scritta così:

Root: HKLM; Subkey: SOFTWARE\MyCompany\MyTool; ValueType: string; ValueName: MyValue; ValueData: {code:GetUserEnteredText}; Flags: createvalueifdoesntexist uninsdeletekeyifempty uninsdeletevalue 

Questo crea un valore di Registro di sistema denominata "MyValue" in HKLM \ SOFTWARE \ MyCompany \ MyTool che contiene ciò che il utente inserito nella casella di testo.

+1

grazie per l'esempio, che aiuta davvero! Solo un'ultima cosa, come faccio a catturare ciò che è stato inserito dall'utente? Posso quindi semplicemente usarlo come variabile quando scrivo sulla chiave di registro. – Abs

+0

Vedi il mio EDIT 2 ... :-) –

+3

omg, grazie mille! +1 non è abbastanza Per quelli che vedono questa domanda, digliene un po '! :) – Abs

Problemi correlati