Obsługiwanie dynamicznie tworzonych komponentów

0

Witam. Ostatnio poczytałem trochę o dynamicznym tworzeniu komponentów ale nie do końca to ogarniam. Problem jest taki: na formie jest tylko button1, który po kliknięciu tworzy jeden pod drugim nowe przyciski i nie wiem w jaki sposób stworzyć procedurę, która po kliknięciu na któryś z tych buttonów hmmm... załóżmy że zmienia własne położenie albo caption, left, top cokolwiek (tego buttona w który kliknę)... Poniżej daję kod i proszę o pomoc.

public
    i:integer;
procedure TForm1.FormCreate(Sender: TObject);
begin
i:=1;
end;
procedure TForm1.Button1Click(Sender: TObject);
var btn:tbutton;
begin
btn:=tbutton.Create(self);
btn.Top:=i*30;
btn.Left:=10;
btn.Caption:='button '+inttostr(i);
btn.Width:=100;
btn.Height:=30;
btn.Parent:=self;
btn.Visible:=true;
i:=i+1;
end;
0

no to troche za malo poczytales.
w takim wypadku msisz utworzyc nowa procedure o budowie identycznej jak ta onClick.
przy tworzeniu buttona dajesz

button.OnClick:=nazwaTwojejProcedury;

a zeby w procedurze odwolac sie do tego buttona dajesz:

(sender as TButton).Caption:='Klikniety';

lub

TButton(sender).Caption:=...

sender to po prostu obiekt ktory wywoluje ta procedure.
dlatego majac nawet 100 buttonow na formie, wystarczy im jedna, "uniwersalna" procedura.

/// z reszta KURNA... z ciekawosci sprawdzilem, ile czasu by mi zajelo znaleienie tego... jakies 4sek (pierwszy wynik)
http://www.google.pl/search?hl=pl&q=delphi+dynamicznie+komponenty&btnG=Szukaj+w+Google&lr=&aq=f&oq=
nastepnym razem szukaj!!! wiekszosc ludzi szybciej samemu znajdzie odpowiedz na googlach, niz czekajac az ktos im odpowie na forum....

0

Wielki dzięki działa ;) To był tylko przykład żeby było wiadomo o co mi chodzi a teraz idę kombinować dalej z moim programikiem. pzdr :)

0

Gdzieś przy tworzeniu przycisków:

btn.OnClick := KlikniecieButona;

Później deklarujesz procedurę do sekcji private albo public i w jej definicji:

procedure TForm1.KlikeniecieButona(Sender: TObject);
begin
  with Sender as TButton do
    begin
    Caption := 'cosik';
    end;
end;

Pamiętaj także o nadawaniu komponentom unikalnych nazw, przyda się to przy ewentualnym do nich
odwoływaniu na przykład poprzez funkcję FindComponent. Nazwa może być np. Button + jakaś cyfra.

EDIT: a cimak mnie ubiegł, po prostu miałem otwarte okno z tym postem jakiś czas i nie odświeżyłem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1