Dinamikusan okozó alkatrészek

Ma beszéljünk arról, hogyan lehet létrehozni komponensek futási időben.

Néha előre nem ismert a komponensek száma. Ezért Delphi képes létrehozni őket a program. Ehhez egyszerűen hívja a Create kivitelező, állítsa be a kívánt tulajdonságokat és eseményeket. És a megjelenése a komponens a képernyőn, hogy telepítse a szülő tulajdonság.

Ha rákattint a bal egérgombbal, a program létrehoz egy gomb, és ha rákattint a jobb - Panel. Amennyiben a komponensek jönnek létre, ahol az egér. Ha rákattintott Panel1, a komponens jelenik meg Panel1.
.
nyilvános
eljárás OnButtonClick (Sender: TObject);
végén;

var
Form1: TForm1;

használja stdctrls, extctrls;

eljárás TForm1.OnButtonClick (Sender: TObject);
kezdődik
ha a feladó TButton majd
A (Sender mint TButton) do
Caption: = Caption + '1';
végén;

eljárás TForm1.FormMouseDown (Sender: TObject; gomb: TMouseButton;
Shift: TShiftState; X, Y: Egész szám);
var b: TButton;
p: TPanel;
kezdődik
ha gomb = mbRight majd
kezdődik
p: = TPanel.Create (nulla);
p.Caption: = 'Panel' + IntToStr (random (100));
p.Left: = X;
p.Top: = Y;
p.Width: = Random (200) + 100;
p.Height: = Random (200) + 100;
p.OnMouseDown: = Form1.OnMouseDown;
p.Parent: = Küldő mint TWinControl;
véget mást
kezdődik
b: = TButton.Create (nulla);
b.Caption: = 'gomb' + IntToStr (random (100));
b.ShowHint: = true;
b.Hint: = 'Tudnivaló az' + b.Caption;
b.Left: = X;
b.Top: = Y;
b.OnClick: = OnButtonClick;
b.Parent: = Küldő mint TWinControl;
végén;
végén;

De szükség lehet valami köze a komponensek után jönnek létre. Ebben az esetben meg kell, hogy hozzon létre egy tömböt, amelyben ezek a komponensek hazudnak. Ez a program tárolja egy sor 100 kulcsokat. Amikor átméretezi az ablakot gombok átrendeződik.

var
b: array [0..99] az TButton;

eljárás TForm1.FormCreate (Sender: TObject);
var i: integer;
c: integer;
kezdődik
c: = Form1.ClientWidth div 52;
i: = alacsony (b) a magas (b) do
kezdődik
b [i]: = TButton.Create (nulla);
b [i] .Caption: = IntToStr (i + 1);
b [i] .Width: = 50;
b [i] .Height: = 20;
b [i] .Left: = 52 * (i mod c);
b [i] .Top: = 22 * ​​(i div c);
b [i] .PARENT: = Form1;
végén;
végén;

eljárás TForm1.FormResize (Sender: TObject);
var i: integer;
c: integer;
kezdődik
c: = Form1.ClientWidth div 52;
i: = alacsony (b) a magas (b) do
kezdődik
b [i] .Left: = 52 * (i mod c);
b [i] .Top: = 22 * ​​(i div c);
végén;
végén;

Kapcsolódó cikkek