Inno Setup personnalise FinishedLabel avec Pascal Script

Oct 06 2020

Mon objectif avec Inno Setup 6.x est de personnaliser le FinishedLabeltexte dans le code, c'est-à-dire Pascal Script. La raison pour laquelle j'utilise Pascal Script est que je ne souhaite personnaliser / modifier l'étiquette que si elle IsAdminMode()est vraie. Comment puis je faire ça?

Les deux approches suivantes ne fonctionnent pas:

  1. Utilisez une constante scriptée:

    [Messages]
    FinishedLabel={code:GetFinishedLabel}
    
    [Code]
    function GetFinishedLabel(Param: String): String;
    begin
      Result := 'BLA';
    end;
    

    Cela montre "{code: GetFinishedLabel}" plutôt que "BLA".

  2. Personnalisez l'assistant dans InitializeWizard.

    Exemple complet (échec):

    [Code]
    procedure InitializeWizard();
    begin
      WizardForm.FinishedLabel.Caption := 'BLA';
    end;
    

    Le FinishLabelmontre toujours le texte original deDefault.isl

Des idées?

Réponses

2 pimpo Oct 06 2020 at 18:25

Le FinishedLabelest mis à jour à la fin de l'installation en fonction de divers facteurs. Ainsi, votre valeur définie dans InitializeWizardest remplacée. Vous devez définir votre message personnalisé ultérieurement, comme dans CurPageChanged(wpFinished):

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpFinished then
  begin
    WizardForm.FinishedLabel.Caption := 'BLA';
  end;
end;

Vous pourriez envisager d'améliorer le code pour faire ce que ferait Inno Setup, comme:

  • Prise en compte, si un redémarrage est nécessaire ( FinishedRestartLabel);
  • Prise en compte, si des icônes ont été créées ( FinishedLabelvs. FinishedLabelNoIcons);
  • Ajuster la hauteur de l'étiquette en fonction du message;
  • Changement de RunListposition en fonction de la hauteur du message.