Salut à tous, j'éssaie de créer un composant qui pourrait contenir des composant graphiques, comme par exemple des boutons.
Voici la définition:
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 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;
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?
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;
Merci d'avance !
Partager