2017-06-10 1 views
2

Suite de ceci: Inno Setup Placing image/control on custom page.Image couvrant la page entière dans Inno Setup

Ce fait ce que je dois:

CustomPage := CreateCustomPage(wpLicense, 'Heading', 'Sub heading.'); 

ExtractTemporaryFile('image.bmp'); 

BtnImage := TBitmapImage.Create(WizardForm); 
with BtnImage do 
begin 
    Parent := CustomPage.Surface; 
    Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\image.bmp'); 
    AutoSize := True; 
    AutoSize := False; 
    Height := ScaleX(Height); 
    Width := ScaleY(Width); 
    Stretch := True; 
    Left := ScaleX(90); 
    Top := WizardForm.SelectTasksPage.Top + WizardForm.SelectTasksPage.Height - 
     Height - ScaleY(8); 
    Cursor := crHand; 
    OnClick := @ImageOnClick; 
end; 

Cependant, je voudrais l'image d'arrière-plan pour être la pleine taille de l'espace ci-dessous la rubrique et au-dessus du pied sans marges latérales. J'essayais divers étirement/marge/hauteur/largeur, mais les résultats sont salissants. Quel est le meilleur moyen d'y parvenir, quel que soit le DPI?

Répondre

1

Vous pouvez récupérer une taille de la surface de page (personnalisée) à l'aide de TWizardPage.SurfaceHeight and TWizardPage.SurfaceWidth.

BtnImage.Height := CustomPage.SurfaceHeight; 
BtnImage.Width := CustomPage.SurfaceWidth; 

Bien que vous verrez que la (sur mesure) page ne couvre pas la zone entière entre « tête » (MainPanel) et « Pied de page » (partie inférieure avec des boutons).

enter image description here


Si vous souhaitez afficher l'image dans toute la zone entre « tête » et « Pied de page », vous ne pouvez pas le placer sur la page (personnalisée). Vous devez le placer sur le InnerPage (ce qui est un contrôle parent de toutes les pages avec le "en-tête").

BtnImage.Parent := WizardForm.InnerPage; 

BtnImage.Left := 0; 
BtnImage.Top := WizardForm.Bevel1.Top + 1; 
BtnImage.Width := WizardForm.InnerPage.ClientWidth; 
BtnImage.Height := WizardForm.InnerPage.ClientHeight - BtnImage.Top; 

Mais de cette façon l'image ne sera pas automatiquement affichée/masquée comme la page personnalisée affiche/cache. Vous devez le coder. Utilisez CurPageChanged event function.

procedure CurPageChanged(CurPageID: Integer); 
begin 
    WizardForm.InnerNoteBook.Visible := (CurPageID <> CustomPage.ID); 
    BtnImage.Visible := (CurPageID = CustomPage.ID); 
end; 

enter image description here


des questions similaires: