Przypisanie procedury do buttona

Przypisanie procedury do buttona
K1
  • Rejestracja:około 20 lat
  • Ostatnio:około 14 lat
  • Postów:64
0

Mam taką procedurę tworzącą buttony:

Kopiuj
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??

PI
  • Rejestracja:ponad 19 lat
  • Ostatnio:około rok
  • Postów:440
0

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

Kopiuj
//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;
KD
  • Rejestracja:ponad 19 lat
  • Ostatnio:ponad 15 lat
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]

Kopiuj
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;
Kopiuj
procedure execute_compcode(sender : tobject);

to juz ta procedura na klikniecie

a to juz glowna procdedura parsera jezyka ziomal

Kopiuj
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

K1
  • Rejestracja:około 20 lat
  • Ostatnio:około 14 lat
  • Postów:64
0

A nie żadnego prosszego sposobu na to?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.