2010-05-08 4 views
3

Je construis un contrôle personnalisé, et j'en ai besoin pour pouvoir répondre quand il sera redimensionné. J'ai besoin des anciennes dimensions et des nouvelles dimensions disponibles pour faire des calculs.Comment savoir quand mon contrôle change de taille?

Malheureusement, les méthodes SetWidth et SetHeight sont privées à TControl, non protégées, et donc je ne peux pas les contourner. Y a-t-il un autre moyen de savoir que mon contrôle est sur le point d'être redimensionné et que l'ancienne taille et la nouvelle taille sont disponibles?

Répondre

9

Substituez la méthode publique SetBounds. Il passe dans la nouvelle taille, et vous pouvez utiliser les propriétés Largeur et Hauteur pour obtenir la largeur/hauteur actuelle.

procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override; 
-1

Une solution alternative consisterait simplement à utiliser l'événement OnResize de TControl. Cela n'est pas nécessairement publié dans certains contrôles, mais si ce n'est pas le cas, vous pouvez toujours attacher un gestionnaire dans le code.

MyControl.OnResize := MyResizeEvent; 

Bien que cela ne vous permettra d'obtenir la nouvelle taille, si vous avez gardé le oldsize dans un ensemble de variables, alors vous pouvez faire ce que vous souhaitez.

function Myform.MyResizeEvent(Sender: TObject) ; 
var 

begin 

    DoSomethingOnResize(OldHeight, OldWidth, (Sender as TControl).Height,(Sender as TControl).Width); 
    OldHeight := (Sender as TControl).Height; 
    OldWidth := (Sender as TControl).Width; 

end; 
+0

C'mon. Il construit un contrôle personnalisé. Cela devrait marcher sur n'importe quel parent, pas seulement sur Myform. –

+0

-1. Lors de l'écriture d'un contrôle, les gestionnaires d'événements de votre propre contrôle sont interdits. Les gestionnaires d'événements sont destinés aux consommateurs du contrôle, pas aux auteurs. Si vous voulez l'équivalent de la gestion de cet événement, remplacez la méthode qui déclenche cet événement. Dans ce cas, remplacez 'TControl.Resize'. –

+0

Désolé j'ai raté le peu qu'il écrivait un contrôle personnalisé, je pensais qu'il cherchait juste à obtenir des détails sur quand un contrôle a été redimensionné. –

Questions connexes