COMPOSANT TGRAPHBUTTON

cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 - 30 mai 2002 à 13:42
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 - 30 mai 2002 à 13:42
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/11930-composant-tgraphbutton

cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
30 mai 2002 à 13:42
Merci de m'encourager, nono(40) !!
Je vais modifier ce que tu m'indiques, et j'essaierai de continuer de mettre d'autres propriétés, pour les couleurs... D'ailleurs, pour faire un boîte liste contenant plusieurs valeurs dans l'inspecteur d'objet, c'est un record qu'il faut employer ??

Encore merci !
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
28 mai 2002 à 23:30
He ben, un premier composant ça ce fête !

J'ai quelques remarques ( si tu le permet ) :
** Propriété caption
Elle existe déjà dans le TGraphicControl. Il suffit de mettre Property Caption dans la partie Published. Ensuite pour que le composant se redessine quand le texte change il faut ajouter une méthode privée :
procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
Dont l'implémentation est :
procedure TGraphButton.CMTextChanged(var Message: TMessage);
begin
Invalidate;
end;

** Propriété font
Il faut de même capter un message pour réagir aux changements :
procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
procedure TGraphButton.CMFontChanged(var Message: TMessage);
begin
inherited;
Invalidate;
end;

** OnMouseDown
Il fonctionne bien. Sur la procédure surchargée MouseDown, il faut appeler la méthode héritée :
Procedure TGraphButton.MouseDown(Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
Var Couleur: TColor;
Begin
Couleur := FBColor;
FBColor := FSColor;
FSColor := Couleur;
Paint;
Inherited MouseDown(Button,shift,x,y);
end;
( il faut faire de même dans MouseUp )
L'appel de OnMouseMove est en plus supprimé, il n'est pas utile

** Publication des propriétés
Quand tu définis un composant de ce type publie tout ce qui peut servir à quelqu'un :
property DragCursor;
property DragMode;
property Enabled;
property ParentFont;
property ParentShowHint;
property ShowHint;
property Visible;
property Font;
property Caption;
property OnClick;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
( il en manque peut-être encore )

** Mise à jour de propriétés
Quand une propriété est modifiée il vaut mieux appeler Invalidate que Paint. Invalidate signale seulement à windows que la zone doit être dessinée de nouveau.
De plus il ne faut appeler Invalidate que si la valeur change pour gagner du temps ( je sais ça gagne pas beaucoup, mais un peu + un peu =... )
procedure TGraphButton.SetShadow(Color: TColor);
Begin
If FSColor<>Color
Then Begin
FSColor := Color;
Invalidate;
End;
end;

Voila c'est tout, mais c'est un bon début : continue !
( j'avais pas fait mieu sur mon premier composant )
Rejoignez-nous