louiwahl
Messages postés103Date d'inscriptionvendredi 20 février 2004StatutMembreDernière intervention16 mai 2019
-
23 janv. 2006 à 22:38
louiwahl
Messages postés103Date d'inscriptionvendredi 20 février 2004StatutMembreDernière intervention16 mai 2019
-
26 janv. 2006 à 19:42
Bjr
voila dans mon composant bouton deriver de TImage j'ai mis la
proprietee Caption que je voudrais voire afficher sur mon bouton a la
creation de celui-ci mais je n'arrive qu'a le faire afficher quand je
charge un Bmp avec une proprietee que j'ai ajouter
voila ma fonction Create
Constructor TLBouton.Create(AOwner:TComponent);
begin
Inherited Create(AOwner);
Height:=25;
Width:=60;
Cursor:=crHandPoint; {par défaut, mets le curseur en forme de main}
Canvas.brush.style := bsClear;
Canvas.TextOut(Height div 2,5,Caption);
stretch := True;
AutoSize := True;
Transparent := True;
end;
Quand je fais Canvas.TextOut(Height div 2,5,'Caption'); ca marche
procedure Register;
begin
RegisterComponents('Louis', [TLBouton]);
end;
{ TLBouton }
constructor TLBouton.Create(AOwner: TComponent);
begin
Inherited Create(AOwner);
FDown := False;
Height:=25;
Width:=60;
Cursor:=crHandPoint; {par défaut, mets le curseur en forme de main}
FBmpNorm:=TBitmap.Create;
FBmpDown:=TBitmap.Create;
// stretch := True;
// AutoSize := True;
// Transparent := True;
end;
destructor TLBouton.Destroy;
begin
FBmpNorm.Free;
FBmpDown.Free;
Inherited Destroy;
end;
procedure TLBouton.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
Y: integer);
begin
Inherited MouseDown(Button,Shift,X,Y);
If Enabled Then
if (Button = mbLeft) and ptInRect(ClientRect, Point(x, y)) then
begin
FDown := True;
Invalidate;
end;
end;
procedure TLBouton.MouseUp(Button: TMouseButton; Shift: TShiftState; X,
Y: integer);
begin
Inherited MouseDown(Button,Shift,X,Y);
if Button = mbLeft then
begin
FDown := False;
Invalidate;
end;
end;
procedure TLBouton.Paint;
Var aRect : TRect; Flags : LongWord;
begin
Inherited;
aRect := ClientRect;
Canvas.Font := Font;
Canvas.Brush.Style := bsClear;
Flags := DT_Center Or DT_VCENTER Or DT_EXPANDTABS Or DT_SINGLELINE;
If (FDown) and (Enabled) Then
Begin
//Canvas.Draw(0, 0, BmpDown); // dessin Normal
Canvas.StretchDraw(aRect, BmpDown); // ou Stretch au choix l'un ou l'autre
OffsetRect(aRect, 1, 1); // on decale le texte pour donner l'impression de pression
DrawText(Canvas.Handle, PChar(Caption), -1, aRect, Flags);
End
Else
Begin
//Canvas.Draw(0, 0, BmpNorm); // dessin Normal
Canvas.StretchDraw(aRect, BmpNorm); // ou Stretch au choix l'un ou l'autre
DrawText(Canvas.Handle, PChar(Caption), -1, aRect, Flags);
End;
end;
procedure TLBouton.SetBmpDown(value: TBitmap);
begin
BmpDown.Assign(value);
Invalidate; // Invalidate va déclancher Paint
end;
procedure TLBouton.SetBmpNorm(value: TBitmap);
begin
BmpNorm.Assign(value);
Invalidate;
end;
end.
Si tu as encore des Questions n'hésite pas
Si la réponse te convient n'oublie pas de cliquer sur Réponse Acceptée
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 26 janv. 2006 à 19:30
Bon deux chose,
1°)
TLBouton = class(TGraphicControl)
FBmpNorm, FBmpDown: TBitmap; // est mal placé
private
{ Déclarations privées }
FBmpNorm, FBmpDown: TBitmap; // il faut le mettre ici
FDown : Boolean;
procedure SetBmpNorm(value:TBitmap);
procedure SetBmpDown(value:TBitmap);
protected
2°)
published
{ Déclarations publiées }
property BmpNorm:TBitmap read FBmpNorm write SetBmpNorm;
property BmpDown:TBitmap read FBmpDown write SetBmpDown;
property Caption;
property Enabled; // cette propritée est manquante chez toi et je pense que ça vient de là
property Font;
end;
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 24 janv. 2006 à 15:26
Salut,
faire un Bouton avec un TImage à mon avis c'est pas la bonne solution mais bon c'est ton choix.
pour le reste il faut surcharger la procedure paint de ton nouveau composant :
Procedure MyBouton.Paint
Begin Inherited; // ceci va appeler la procedure Paint de TImage donc la dessiner
Canvas.brush.style : = bsClear; // et ensuite tu écris ton texte
Canvas.TextOut(Height div 2,5,Caption);
End;