Publier un canvas

RV AXE Messages postés 2 Date d'inscription lundi 27 novembre 2000 Statut Membre Dernière intervention 10 août 2010 - 9 août 2010 à 16:51
RV AXE Messages postés 2 Date d'inscription lundi 27 novembre 2000 Statut Membre Dernière intervention 10 août 2010 - 10 août 2010 à 08:51
bonjour à tous

voici un code source ou je créé un composant (par exemple un GraphicControl) dont j'ai publier le canvas.

unit GraphicControl1;

interface

uses
SysUtils, Classes, Graphics, Controls;

type
MyGraphicControl = class(TGraphicControl)
private
{ Déclarations privées }
protected
{ Déclarations protégées }
public
{ Déclarations publiques }
constructor create( AOwner : TComponent );
procedure paint; override;
published
{ Déclarations publiées }
property canvas;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('SAMPLES', [MyGraphicControl]);
end;

Constructor MyGraphicControl.create(AOwner: TComponent);
begin
Inherited create( AOwner );
Left := 50;
Top := 50;
Width := 100;
Height := 100;
Canvas.Brush.Color := clYellow;
end;

Procedure MyGraphicControl.Paint;
begin
inherited Paint;
canvas.Rectangle(0,0,Width, Height);
end;
end.


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, GraphicControl1, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Déclarations privées }
Rectangle : myGraphicControl;
public
{ Déclarations publiques }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
{creation et affichage du rectangle}
begin
rectangle := myGraphicControl.create(Self);
rectangle.Parent := self;
end;

procedure TForm1.Button2Click(Sender: TObject);
{ changement couleur rectangle}
begin
rectangle.canvas.Brush.Color := clgreen;
end;

end.

Lorsque je modifie le canvas dans le programme principal ( par exemple la couleur ) mon composant n'est pas rafraichi automatiquement. pouvez vous m'aider SVP.

2 réponses

cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
9 août 2010 à 18:39
Salut,

procedure TForm1.Button2Click(Sender: TObject);
{ changement couleur rectangle}
begin
rectangle.canvas.Brush.Color := clgreen;
end;

Le problème est que tu ne changes pas le canvas mais la couleur du brush: c' est à dire que tu changes la couleur pour t' apprêter à peindre!
Ça revient un peu à prendre un crayon de couleur vert dans ta main: il faut écrire sur la feuille maintenant.

Utilise
rectangle.canvas.FillRect pour peindre avec la couleur qui est dans canvas.Brush ...

Note: si tu rafraichis le compo, ce que tu as dessiné dessus disparaitra! Essaye par exemple de passer une autre fenêtre devant ton programme avant de revenir sur ce dernier ...

A+
0
RV AXE Messages postés 2 Date d'inscription lundi 27 novembre 2000 Statut Membre Dernière intervention 10 août 2010
10 août 2010 à 08:51
bonjour et merci pour ta réponse. J'ai bien compris que je ne changé que la couleur et que un "invalidate" après mon changement de couleur réglé mon problème. mais je pensé qu'on pouvais le faire de manière automatique. Si j'utilise l'évènement "onChanging" du canvas ça marche mais le rafraichissement est permanent.
0
Rejoignez-nous