Publier un canvas

Signaler
Messages postés
2
Date d'inscription
lundi 27 novembre 2000
Statut
Membre
Dernière intervention
10 août 2010
-
Messages postés
2
Date d'inscription
lundi 27 novembre 2000
Statut
Membre
Dernière intervention
10 août 2010
-
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

Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
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+
Messages postés
2
Date d'inscription
lundi 27 novembre 2000
Statut
Membre
Dernière intervention
10 août 2010

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.