PROJET AUTOBLOG


Tiger-222

Archivé

Site original : Tiger-222

⇐ retour index

Inno Setup : page personnalisée

lundi 17 juin 2013 à 17:24

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 "Acer"


Dans les entrailles du monstre script


Voici les différents composants :
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.