Crearea de componente dinamice

Astăzi, hai să vorbim despre cum se creează componente în timp ce programul rulează.

Uneori numărul de componente nu este cunoscut în prealabil. Prin urmare, în Delphi este posibil să le creați din program. Pentru aceasta este suficient să apelați Creator constructor, setați proprietățile și evenimentele necesare. Și pentru apariția componentei pe ecran, trebuie să setați proprietatea Parent.







Când faceți clic pe butonul stâng al mouse-ului, acest program creează un buton și când faceți clic pe butonul din dreapta - panou. Și componentele sunt create în cazul în care mouse-ul este situat. Dacă ați făcut clic pe Panel1, componenta va apărea pe Panel1.
.
public
procedura OnButtonClick (expeditor: TObject);
se încheie;

var
Form1: TForm1;

utilizează stdctrls, extctrls;

procedura TForm1.OnButtonClick (expeditor: TObject);
începe
dacă Sender este TButton atunci
cu (Sender ca TButton)
Caption: = Caption + '1';
se încheie;

procedura TForm1.FormMouseDown (expeditor: TObject; buton: TMouseButton;
Schimbare: TShiftState; X, Y: Integer);
var b: TButton;
p: TPanel;
începe






dacă Button = mbRight atunci
începe
p: = TPanel.Create (zero);
p.Caption: = 'Panou' + IntToStr (aleatoriu (100));
p.Left: = X;
p.Top: = Y;
p.Lățime: = aleatorie (200) + 100;
p.Height: = aleatoriu (200) + 100;
p.OnMouseDown: = Form1.OnMouseDown;
p.Parent: = Expeditorul ca TWinControl;
incheie altceva
începe
b: = TButton.Create (zero);
b.Caption: = 'Buton' + IntToStr (aleatoriu (100));
b.ShowHint: = adevărat;
b.Intrebare: = 'Sugestie pentru' + b.Caption;
b.Left: = X;
b.Top: = Y;
b.OnClick: = OnButtonClick;
b.Parent: = Expeditorul ca TWinControl;
se încheie;
se încheie;

Dar poate fi necesar să faceți ceva cu componentele după ce acestea sunt create. În acest caz, trebuie să creați o matrice în care vor fi stocate aceste componente. Acest program stochează o serie de 100 de butoane. Când redimensionați fereastra, butoanele sunt rearanjate.

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

procedura TForm1.FormCreate (expeditor: TObject);
var i: întreg;
c: întreg;
începe
c: = Form1.ClientWidth div 52;
pentru i: = joasă (b) la mare (b)
începe
b [i]: = TButton.Create (zero);
b [i] .Capția: = IntToStr (i + 1);
b [i] Lățime: = 50;
b [i] Înălțimea: = 20;
b [i] Lef: = 52 * (i mod c);
b [i] .Top: = 22 * ​​(i div c);
b [i] .Parent: = Form1;
se încheie;
se încheie;

procedura TForm1.FormResize (expeditor: TObject);
var i: întreg;
c: întreg;
începe
c: = Form1.ClientWidth div 52;
pentru i: = joasă (b) la mare (b)
începe
b [i] Lef: = 52 * (i mod c);
b [i] .Top: = 22 * ​​(i div c);
se încheie;
se încheie;







Articole similare

Trimiteți-le prietenilor: