2010-07-09 4 views
14

J'utilise Inno Setup (c'est incroyable!). J'espérais personnaliser le programme d'installation afin que je puisse accepter une chaîne de l'utilisateur sous la forme d'un champ de saisie et peut-être ajouter un message à celui-ci.Inno Setup: Ajouter un champ de saisie personnalisé

Comment est-ce que je peux faire ceci? J'ai regardé à travers les docs, google search et pas grand chose!

Merci à tous pour toute aide

+0

J'ai pris un moment pour parcourir tous les liens faux et brisés pour trouver le isfd208.exe (InnoSetup Form Designer 2.08). Comme Thorsten l'a dit, le lien original est cassé mais [celui-ci] (http://uploaded.to/file/swq33y) fonctionne à la date de ce commentaire. (Note: Il ne fonctionne pas sur Windows 7 mais fonctionne sur xp) – Joe

+0

Le lien de Joe est également cassé. En voici une qui fonctionne: [http://www.cenadep.org/2012/02/09/innosetup-form-designer/](http://www.cenadep.org/2012/02/09/innosetup- form-designer /) –

Répondre

34

Vous pouvez utiliser des scripts Pascal InnoSetup pour créer de nouvelles pages pour l'installateur. Ces pages peuvent être intégrées dans le flux d'installation normal. Ceci est bien documenté dans l'InnoSetup documentation (recherche Google devrait également venir avec des échantillons). Le dossier Samples de votre programme Files \ InnoSetup contient également des exemples de code.

Il y a quelque temps, il existait un logiciel appelé InnoSetup Form Designer, qui vous permettait de concevoir visuellement la page. Le lien est toujours là, mais sur la page je n'ai pas pu trouver le téléchargement. Peut-être que si vous regardez autour d'un peu, vous pouvez le trouver?

EDIT
Ceci est un exemple pour une page que j'ai fait une fois. . Voici la section de code du fichier ISS [Code]

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
Pour écrire la valeur entrée par l'utilisateur à une clé de Registre, créez une nouvelle fonction:

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

Cette fonction renvoie simplement ce qui a été entré dans la zone de texte. S'il vous plaît noter que la fonction doit prendre un paramètre de chaîne - même si vous l'ignorez!

Dans la section [Registry] de votre script, déclarer la clé qui devrait être écrit comme ça:

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

Cela crée une valeur de registre « MyValue » dans HKLM \ SOFTWARE \ MyCompany \ MyTool qui contient ce que le utilisateur entré dans la zone de texte.

+1

merci pour l'exemple, ça aide vraiment! Juste une dernière chose, comment puis-je capturer ce qui a été entré par l'utilisateur? Je peux alors simplement utiliser cela pour être une variable lorsque j'écris à la clé de registre. – Abs

+0

Voir mon EDIT 2 ... :-) –

+3

omg, merci beaucoup! +1 n'est pas suffisant. Pour ceux qui voient cette question, donnez-lui un peu de chance! :) – Abs

Questions connexes