jak dodać procedure do dynamicznie tworzonego komponentu?

0

jak dodać procedure do dynamicznie tworzonego komponentu?

0

Spróbuj (a co ci szkodzi), np:
[code]Button.OnClick := Button1Click;[/code]

//Nie mogę sprawdzić bo mojej dwójeczki delphi nigdzie nimo...

0

Probowałem. nie działa.
Mam utworzyć procedure do ttimera

0

trzeba przypisać mu OnEvent komponentu nie-dynamicznego.

0

Czyli??

Mam procedure:

procedure pisz(nrtimera :Integer);
var
component:Tcomponent;
begin
component:=form1.FindComponent('Timer'+ inttostr(nrtimera));
TTimer(component).Interval:= random(500);
canvas.TextOut(x[nrtimera],y,inttostr(random(9)));
x[nrtimera]:=x[nrtimera]+20;
end;

Tworze komponent:

while i<51 do
begin
with TTimer.Create(self) do
begin
name:= 'Timer' + inttostr(i);
ontimer:= 

Jak przypisać do tego moją procedure?

0

Tworzysz procedure np. w publicu formy:
procedure Zdarzenie(Sender: TObject)
potem
procedure TForm1.Zdarzenie(Sender: TObject);
begin
...
end;

tworzenie komponentu
blablabla
Komponent.OnTimer:=Zdarzenie;

Mniej więcej tak

0

Co oznacza to "Sender: TObject" bo ja chce przekazać tylko liczbe ale nadal nie dziala.

0

Obiekt, dla którego zdarzenie jest wywoływane.

Poczytaj help od Delphi, kursy itd.

0

No dobrze ale u mnie dalej nie działa

gdy dodam do ontimer:= pisz(i)

to wyskakuje komunikat:

<font color="red">[Error] Unit1.pas(108): Incompatible types: 'TNotifyEvent' and 'procedure, untyped pointer or untyped parameter'</span>

0

Procedura musi nalezec do jakiejs klasy. Pisalem to gdzies niedawno tu na forum. Zadeklaruj procedure np. w klasie formy, na ktorej znajduje sie timer. Przykład:

type
  TForm = class(TForm)
  {...}
  private
    procedure Zdarzenie(Sender: TObject);
  {...}

procedure TForm1.Zdarzenie(Sender: TObject);
begin
// kod zdarzenia
end;

// gdzies w programie
begin
  {...}
  Timer.OnTimer := Zdarzenie; // nie podajemy parametrow
  {...}
end;
0
Timer.OnTimer := Zdarzenie; // nie podajemy parametrow;

ale ja musze przekazać parametr jako integer

0

Przy przypisywaniu zdarzenia nie możesz przekazywać parametrów. Jeśli chcesz rozpoznać, który timer wywołał zdarzenie to użyj Sendera:

if (Sender as TTimer) = Jakis_Timer then
  // cos tam

albo właściwości Tag:

if (Sender as TTimer).Tag = JAKAS_LICZBA then
  // cos tam
0

Dzięki z pomoc już działa

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