Bun venit pe SkullBox!

Bine ai venit, Vizitator. Trebuie să te autentifici sau să îţi creezi un cont.
Ai pierdut sau nu ai primit emailul care conţine codul de activare al contului?

Autentifică-te cu numele de utilizator, parola şi precizează durata sesiunii.
  Pagini: [1]
  Imprimă  
Creare dinamica de componente [Delphi]  (Vizualizari 229)
DarkByte
*

Deconectat Deconectat

Mesaje: 2441

WWW
Creare dinamica de componente [Delphi], Mai 16, 2008, 08:48

V-ati intrebat vreodata cum ati putea crea din cod un buton ? Ati incercat vreodata ?

Uitati-va ce simplu e :
Cod:
 Buton := TButton.Create(Form1);

  with Buton do
    begin
      left := 20;
      top := 40;
      Caption := 'I''m the best button';
      Parent := Form1;
      OnClick := ClickButton;
    end;
Bineinteles, ClickButton e o procedura oarecare, care primeste un parametru Sender : TObject, pusa sa se execute cand userul da click pe butonul tocmai creat.

Totusi, ce sa faci cu un singur buton ? Daca stii unde va trebui pus, il vei pune direct din design ... asa ca sa vedem cum cream mai multe Big grin

Eu am declarat doua variabile globale asa:
Cod:
var but : array [1..100] of TButton;
    N : Byte;
, la eventul OnMouseDown pe forma am scris :
Cod:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  If N > 100
    Then Exit;
   
  inc(n);
  but[n] := TButton.Create(Form1);

  with but[n] do
    begin
      left := X;
      top := Y;
      Caption := IntToStr(X) + ' - ' + IntToStr(Y);
      Parent := Form1;
      OnClick := ClickButton;
    end;
end;
, iar ClickButton urmeaza:
Cod:
procedure TForm1.ClickButton(Sender : TObject);
begin
  ShowMessage('Hello, my name is "' + (Sender as TButton).Caption + '".' + #13#10 + 'Nice to meet you too :))');
end;
Pentru pornirea, respectiv oprirea programului am scris inca doua evenimente, pentru a ma asigura ca totul merge bine:
Cod:
procedure TForm1.FormCreate(Sender: TObject);
begin
  N := 0;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var I : Integer;
begin
  for i := 1 to n do
    FreeAndNil(but[i]);
end;
Ca sa nu va chinuiti cu copy / paste si asignare de evenimente, aici e sursa. Distractie placuta Smile
Memorat

Light travels faster than sound. This is why some people appear intelligent until they speak.

Quidquid latinum dictum sit, altum viditur.

SkullAds
Ecspert
ReclAmator
* * * * *
Google AdSense

Gen: Bărbat
Mesaje: Multe

Reclama AdSense,
 

 
   


Pagini: [1]
  Imprimă  
 
Schimbă forumul:  

Ethical hacking and programming community
Powered by SMF 1.1.7 | SMF © 2006-2008, Simple Machines LLC
Traducerea în limba română © 2006-2007 www.smf.ro