Inno Setup personaliza FinishedLabel com Pascal Script

Oct 06 2020

Meu objetivo com o Inno Setup 6.x é personalizar o FinishedLabeltexto no código, ou seja, Pascal Script. A razão pela qual estou usando Pascal Script é que só quero personalizar / alterar o rótulo se IsAdminMode()for verdadeiro. Como eu posso fazer isso?

As duas abordagens a seguir não funcionam:

  1. Use uma constante de script:

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

    Isso mostra "{code: GetFinishedLabel}" em vez de "BLA".

  2. Personalize o assistente em InitializeWizard.

    Exemplo completo (com falha):

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

    A imagem FinishLabelainda mostra o texto original deDefault.isl

Alguma ideia?

Respostas

2 pimpo Oct 06 2020 at 18:25

O FinishedLabelé atualizado no final da instalação de acordo com vários fatores. Portanto, o valor definido em InitializeWizardé substituído. Você deve definir sua mensagem personalizada mais tarde, como em CurPageChanged(wpFinished):

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

Você pode melhorar o código para fazer o que o Inno Setup faria, como:

  • Levando em consideração se é necessário reiniciar ( FinishedRestartLabel);
  • Levando em consideração, se ícones foram criados ( FinishedLabelvs. FinishedLabelNoIcons);
  • Ajustar a altura da etiqueta para caber na mensagem;
  • Mudança de RunListposição de acordo com a altura da mensagem.