Inno Setup - come centrare una gif animata nella procedura guidata ridimensionata

Aug 20 2020

Vorrei centrare la mia gif animata proprio al centro di tutte le pagine del mio programma di installazione ( WizardSizePercent=150) senza utilizzare valori.

Ecco il mio codice:

var
  ParentForm: TSetupForm;

begin
  TimerID := 0;
  SlideID := 0;
  ContentHeight := ParentForm.Top + ParentForm.Height;
  ExtractTemporaryFile('Image1.bmp');
  ExtractTemporaryFile('Image2.bmp');
  ExtractTemporaryFile('Image3.bmp');
  ExtractTemporaryFile('Image4.bmp');
  ExtractTemporaryFile('Image5.bmp');
  ExtractTemporaryFile('Image6.bmp');


  Panel := TPanel.Create(ParentForm);
  Panel.Parent := ParentForm;
  Panel.Left := 185;
  Panel.Top := ParentForm.Top + 130;
  Panel.Width := 1000;
  Panel.Height := 380;
  Panel.Visible := True;

  BackImage := TBitmapImage.Create(ParentForm);
  BackImage.Parent := Panel;
  BackImage.Width:= 1000;
  BackImage.Height:= 380;
  BackImage.Left := (Panel.Height - BackImage.Height) div 2;
  BackImage.Top := (Panel.Height - BackImage.Height) div 2;
  BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image1.bmp'));
  StartSlideTimer;
end;

Come devo modificare i valori di ContentHeight, Panele BackImage?

Risposte

2 MartinPrikryl Aug 20 2020 at 17:39

Crea l'immagine solo dopo che WizardSizePercentè stato applicato. Quindi ad esempio in CurPageChanged, non in InitializeWizard.

O meglio, per avere una soluzione più robusta, che funzioni ad esempio anche con WizardResizable, rispondere WizardForm.OnResizeaggiornando le coordinate dell'immagine (o meglio le Panelcoordinate - anche se non ne capisco lo scopo). Per un esempio, vedi Impostare la larghezza del controllo a metà della pagina personalizzata SurfaceWidth non funziona correttamente in Inno Setup .


Notare inoltre che non è possibile utilizzare coordinate costanti. L'immagine non verrebbe centrata correttamente su schermi con DPI alti. Scala le coordinate - per questo controlla ad esempio Inno Setup Posizionamento immagine / controllo sulla pagina personalizzata . O nel tuo caso, sarebbe meglio, se calcoli le coordinate centrate in modo programmatico in base alle dimensioni dell'immagine e della finestra - per questo, controlla In Inno Setup, come faccio a centrare del testo nella finestra?