2013-01-21 3 views
2

Je suis récemment passé à Inno Setup et c'est fantastique! J'étais à peu près capable de faire fonctionner la plupart des choses sauf que j'ai un problème avec quelque chose. Fondamentalement, j'essaye de créer ma propre conception d'en-tête et j'essayais de rendre la description de titre/page de page transparente. Cependant, ils se chevauchent lors du changement de page. (S'il vous plaît se référer à l'image).Inno Setup PageDescriptionLabel se chevauchant

http://img703.imageshack.us/img703/6180/88647320.png

code:

procedure InheritBoundsRect(ASource, ATarget: TControl); 
begin 
    ATarget.Left := ASource.Left; 
    ATarget.Top := ASource.Top; 
    ATarget.Width := ASource.Width; 
    ATarget.Height := ASource.Height; 
end; 

procedure CurPageChanged(CurPageID: Integer); 
var 
    TD: TLabel; 
begin 
    TD := TLabel.Create(WizardForm); 
    TD.Parent := WizardForm.PageDescriptionLabel.Parent; 
    TD.Caption := WizardForm.PageDescriptionLabel.Caption; 
    TD.WordWrap := WizardForm.PageDescriptionLabel.WordWrap; 
    TD.Transparent := True; 
    InheritBoundsRect(WizardForm.PageDescriptionLabel, TD); 
    TD.AutoSize := True; 
end; 

Aussi, je ne suis même pas sûr que ce soit la meilleure façon de le faire, donc si quelqu'un a une suggestion, I'de aimer les entendre.

+0

Je crois que je connais le problème, je crée une nouvelle forme à chaque fois « TLabel » est changé si bien sûr une un nouveau sera créé au-dessus de l'autre; Cependant, je ne suis toujours pas sûr de la façon de le réparer. –

Répondre

4

Comme vous l'avez bien souligné, vous créez votre étiquette plusieurs fois. Pour être plus précis, chaque fois que la nouvelle page est affichée (chaque fois que vous appuyez sur les boutons Suivant ou Précédent). Vous devez créer l'étiquette une seule fois, idéalement dans l'événement d'initialisation du formulaire de l'assistant, comme le InitializeWizard. Sauf que, vous devez ensuite modifier la légende de l'étiquette chaque fois que la page change. Comme meilleur pour cela, vous devez utiliser cet événement CurPageChanged. Donc, pour faire l'étiquette de description de page transparente (ce que je raté), vous pouvez utiliser le script comme suit:

[Code] 
var 
    DescLabel: TLabel; 

procedure InheritBoundsRect(ASource, ATarget: TControl); 
begin 
    ATarget.Left := ASource.Left; 
    ATarget.Top := ASource.Top; 
    ATarget.Width := ASource.Width; 
    ATarget.Height := ASource.Height; 
end; 

procedure InitializeWizard; 
begin 
    DescLabel := TLabel.Create(WizardForm); 
    DescLabel.Parent := WizardForm.PageDescriptionLabel.Parent; 
    DescLabel.WordWrap := WizardForm.PageDescriptionLabel.WordWrap; 
    DescLabel.AutoSize := WizardForm.PageDescriptionLabel.AutoSize; 
    DescLabel.Transparent := True; 
    InheritBoundsRect(WizardForm.PageDescriptionLabel, DescLabel); 

    WizardForm.PageDescriptionLabel.Visible := False; 
end; 

procedure CurPageChanged(CurPageID: Integer); 
begin 
    DescLabel.Caption := WizardForm.PageDescriptionLabel.Caption; 
end; 
+0

Merci TLama! Je suis devenu un très grand fan de toi aujourd'hui lol. Toutes les questions que j'ai eu aujourd'hui, Il a surtout été répondu par vous sur Stackoverflow. –

+0

Désolé TLama, j'ai déjà essayé cette méthode auparavant et le problème était qu'elle ne changeait pas à chaque changement de page. Cela commence avec TD étant "*", et TD reste ainsi. C'est pourquoi je suis passé à CurPageChanged. Donc, fondamentalement, il ne fonctionne toujours pas complètement. Existe-t-il un moyen de définir globalement TD et de simplement changer la valeur lors du changement de page? ou peut-être d'une autre manière? –

+0

Désolé, mon mauvais. J'ai raté le but de cette étiquette. Voir la mise à jour maintenant ... – TLama