Salut à tous, j'éssaie de créer un composant qui pourrait contenir des composant graphiques, comme par exemple des boutons.
Voici la définition:

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
 
unit ComponentContainer;
 
interface
 
uses
  SysUtils, Classes, Graphics, Controls, Dialogs;
 
type
  TComponentContainer = class(TCustomControl)
  private
    mcontrols: array of TControl;
  protected
    procedure Paint; override;
  public
    constructor Create(AOwner:TComponent); override;
    procedure addControl(ctrl:TControl);
    procedure deleteControl(id:integer);
    procedure refreshControls();
  published
    property Align;
    property Caption;
    property Color;
    property Cursor;
    property DragCursor;
    property DragMode;
    property Enabled;
    property Font;
    property Hint;
    property ParentFont;
    property ParentShowHint;
    property PopupMenu;
    property Visible;
    property Anchors;
  end;
 
procedure Register;
et les procédures addControl et refreshControls:
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
 
procedure TComponentContainer.addControl(ctrl:TControl);
var
i:integer;
begin
     i:=length(mcontrols);
     setlength(mcontrols,i+1);
     ctrl.parent:=self;
     mcontrols[i]:=ctrl;
     refreshControls();
end;
 
procedure TComponentContainer.refreshControls();
var
ctop:integer;
i:integer;
begin
     ctop:=self.top;
     for i := 0 to Length(mcontrols) - 1 do
     begin
       mcontrols[i].Top:= ctop;
       mcontrols[i].Left:=left+3;
       mcontrols[i].width:=width-6;
       mcontrols[i].visible:=true;
       mcontrols[i].refresh();
       ctop := ctop + mcontrols[i].Height + 3;
     end;
refresh();       
end;
 
procedure TComponentContainer.Paint;
var
i:integer;
begin
  inherited Paint;
  with Canvas do
    begin
      Brush.Style:=bsSolid;
      Brush.Color:=Color;
      Pen.Color:=clBlack;
      Rectangle(0,0,Width,Height);
    end;
 
      for i := 0 to Length(mcontrols) - 1 do
           mcontrols[i].refresh();
end;
J'ai testé un exemple simple, en mettant 2 boutons sur une form, quand je cliques sur l'un, j'ajoute l'autre dans le composant. Le bouton disparait de la form, mais ne s'affiche pas. Quelqu'un aurait une idée?

Merci d'avance !