Inno Setup c'est bien, mais la documentation est un peu brouillon et trouver des informations précises n'est pas chose facile.
Pour la prochaine version de Pombo, j'avais besoin d'avoir une liste contenant plusieurs choix sur une seule page, et surtout pouvoir utiliser l'élément sélectionné par la suite.
Voici le code source de getmark.iss, pour l'utiliser, il suffit d'ajouter cette instruction dans la section [Code] :
#include "getmark.iss"
Avant d'entrer plus dans les détails, pour récupérer l'élément sélectionné (pour les section [Files] ou [Registry] par exemple) : {code:GetTheMark}
renverra "ASUS".
Dans les entrailles du monstre script
Voici les différents composants :
- une procédure standard InitializeWizard : ajout de la page personnalisée dans l'installeur global
- une procédure standard CurPageChanged : pour déterminer quand il y a un changement de page (boutons Précédent et Suivant)
- une procédure CreatePageStealthMode : création de la page personnalisée
- une procédure OnPageStealthModeClicked : action(s) à effectuée(s) lorsqu'un choix est fait dans la liste
- une fonction GetTheMark() : permet de récupérer le choix de la liste pour les autres étapes/sections
Les procédures suivantes s'occupent de l'intégration de la page personnalisée.
C'est simple, ici on vient ajouter la page personnalisée à l'installeur :
procedure InitializeWizard;
begin
CreatePageStealthMode;
end;
La portion de code suivante sert uniquement à désactiver le bouton Suivant
lorsque l'on est sur la page personnalisée afin d'obligé l'utilisateur à faire un choix :
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = PageStealthMode.ID then
if ChosenMark.ItemIndex = -1 then
WizardForm.NextButton.Enabled := False;
end;
Les procédures suivante s'occupent de la création et de la gestion de la page personnalisée.
La fonction CreateCustomPage() permet de spécifier après quelle page standard il faut insérer la nôtre, un titre et un texte explicatif. Ici, je choisis d'afficher la page personnalisée juste après la page qui affiche la licence (wpLicense
). La liste de choix est une simple TListBox ajoutée en pleine page :
procedure CreatePageStealthMode;
var
j : Integer;
begin
PageStealthMode := CreateCustomPage(wpLicense, ExpandConstant('{cm:marque_title}'), ExpandConstant('{cm:marque_texte}'));
ChosenMark := TListBox.Create(PageStealthMode);
ChosenMark.Width := PageStealthMode.SurfaceWidth;
ChosenMark.Height := PageStealthMode.SurfaceHeight - 10;
ChosenMark.Parent := PageStealthMode.Surface;
{ Assignement de la procédure lorsqu'un élément est choisi. }
ChosenMark.OnClick := @OnPageStealthModeClicked;
for j := 0 to High(Marks) do begin
ChosenMark.Items.Add(Marks[j]);
end;
end;
On stocke l'élément sélectionné dans la variable TheMark
puis on réactive le bouton Suivant
, ça peut toujours être pratique :
procedure OnPageStealthModeClicked(Sender: TObject);
var
list : TListBox;
begin
list := TListBox(Sender);
TheMark := list.Items[list.ItemIndex];
WizardForm.NextButton.Enabled := True;
end;
Il nous reste la fonction GetTheMark()
, qui est on ne peut plus simple :
function GetTheMark(Param: String): String;
begin
Result := TheMark;
end;
Elle sert uniquement à avoir accès à l'élément sélectionné en dehors du code, pour les autres pages/étapes de l'installeur.