Przypisanie procedury do buttona

0

Mam taką procedurę tworzącą buttony:

procedure TForm1.FormCreate(Sender: TObject);

var i:integer; 
begin
 for i:=1 to 15 do begin

   bt[i]:=tbutton.create(form1);
   bt[i].parent:=self;

   bt[i].caption:=inttostr(i); 
   bt[i].top:=20*i;
   bt[i].visible:=true;
 end;
end;

Jak przypisać do tych buttonów procedury??

0

A po co ci cała tablica przycisków heheh

//do sekcji public dodajesz 
 public
    procedure Procedurka(Sender: TObject);   // procedura musi miec Taką Strukture

//a w implementation
procedure TForm1.Procedurka(Sender: TObject);
begin
TButton(Sender).Caption:='Nacisnięto';

end;
// i naprzykład w timerku
procedure TForm1.Timer1Timer(Sender: TObject);
var
Button:TButton;
i:integer;

begin
Button:=TButton.Create(Self);
Button.Parent:=Self;
Button.Top :=30*i;
Button.Caption:=Inttostr(i);
Button.OnClick :=Procedurka ;
inc(i);

end;
0

TBUTTON(SENDER) jak nie wiesz do jakiej kontroli sie odwolujesz robisz tak:
sender.classname lyb classtype i tam sprawdzasz, dodatkowo: zamiast tbutton mozesz uzyc twincontrol(sender)

oto kod z takiej imitacji delphi, ktora napsialem [dal mnie to juz hcyba powtorzenie posta wyzej]

if lowercase(kupa.aclassname) = 'tbutton' then
begin
c1:= tbutton.create(form);
c1.parent       := form;
c1.name         := 'button'+inttostr(button_count);
inc(button_count);
c1.left         := kupa.left;
c1.top          := kupa.top;
c1.height       := kupa.height;
c1.width        := kupa.width;
c1.Caption      := kupa.caption;
c1.show;
c1.OnClick      :=      theform.execute_compcode;

end;
procedure execute_compcode(sender : tobject);

to juz ta procedura na klikniecie

a to juz glowna procdedura parsera jezyka ziomal

procedure TTheForm.execute_compcode(sender : tobject);
VAR
nejm : string;
found : boolean;
start,stop : integer;
i : integer;
begin
found := false;
nejm := twincontrol(sender).name;
for i:=0 to kodformy.count-1 do
if pos('script^onclick('+lowercase(nejm)+');',lowercase(kodformy[i])) > 0 then
found := true;

if found = false then exit;
start   := find_line_text(0,kodformy,'script^OnClick('+nejm+');');
stop    := find_line_text(start,kodformy,'}');

for i:=start to stop do
main_scriptfile.akcja(kodformy[i],3);
end;

Zawsze najlepszym sposobem na zdobycie wiedzy jest czytanie innych kodow, zauwaz ze twincontrol(sender). ma kilka przydatnych cehc jak left top height width visible free bodajze, dzieki temu odwolasz sie do komponentu nie zawsze jak chcesz poniewaz Tobject ma swoje ograniczenia, zawsze (tego nie sprawdzalem) jakbys znalazl w katalogu z Delphi ta klase (w kodzie) to bedziesz mogl zmienic glowny kod delphi i przerobic ta klase jak chcesz ale tego nie probowalem jeszcze bo nigdy nie szukalem, o tym ograniczeniu to jest tak tworzy sie najpierw klase bazowa, na ktorej opiera sie caly silnik dzieki ktoremu pozniej widzimy np. komponenty tak mi sie przynajmniej zdaje ale pewnie nie jestem w ogole oddalony od prawdy w tej tezie bo sam tak pisze rozne przerozne rzeczy :Y

0

A nie żadnego prosszego sposobu na to?

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