Salut

j'essaie de developper un composant basé sur TgraphicControl.
Le code se compile correctement, et le composant est correctement installé dans un nouvel onglet.
Par contre quand j'essaie de metttre ce composant dans une feuille, voici le message d'erreur que j'obtiens: -- Control " has no parent windows --
Est ce que qulqu'un peut m'aider ?
J'ai remarqué que le message d'erreur n'apparait que si la procedure drawComposant est appelée dans le constructor Create.
Le but est que le composant se dessine avec (par exemple) un fond noir et un cadre. Si j'enleve drawComposant du constructeur, je n'ai pas de message d'erreur, mais le composant qui se dessine alors dans la feuille n'a pas de contour, bref il est difficile de le visualiser.

Merci

Voici le bout de code simplifié qui presente le probleme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
unit test ;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls  ;
 
 
type
  TTest = class(TGraphicControl)
  private
    P_ComponentBackGroundColor : TColor;
    procedure SetCpBckgColor(Value:TColor) ;
  protected
    procedure DrawComposant;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property CpBckgColor      : TColor    read P_ComponentBackGroundColor write SetCpBckgColor ;
  end;
 
procedure Register;
 
implementation
 
procedure TTest.DrawComposant;
begin
      // creation Background du composant
      self.Canvas.Brush.Color := P_ComponentBackGroundColor;
      self.Canvas.FillRect(Rect(0,0,self.Width,self.Height));
      // --------------------------------
      invalidate;
end;
 
procedure TTest.SetCpBckgColor (Value:TColor);
begin
   if P_ComponentBackGroundColor <> value then
   begin
      P_ComponentBackGroundColor := Value ;
      DrawComposant ;
   end;
end;
 
constructor TTest.Create(AOwner: TComponent);
begin
  inherited Create (AOwner);
  P_ComponentBackGroundColor := clBlack ;
  Height := 100;
  Width := 400;
  DrawComposant;
end;
 
destructor TTEST.Destroy;
begin
  inherited Destroy;
end;
 
procedure Register;
begin
  RegisterComponents('Tests', [TTEST]);
end;
 
end.

[Balise [code] rajoutée par Seb]
[Pensez-y vous-même à l'avenir. Merci.]