jak dodać procedure do dynamicznie tworzonego komponentu?
Spróbuj (a co ci szkodzi), np:
[code]Button.OnClick := Button1Click;[/code]
//Nie mogę sprawdzić bo mojej dwójeczki delphi nigdzie nimo...
Probowałem. nie działa.
Mam utworzyć procedure do ttimera
trzeba przypisać mu OnEvent komponentu nie-dynamicznego.
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?
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
Co oznacza to "Sender: TObject" bo ja chce przekazać tylko liczbe ale nadal nie dziala.
Obiekt, dla którego zdarzenie jest wywoływane.
Poczytaj help od Delphi, kursy itd.
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>
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;
Timer.OnTimer := Zdarzenie; // nie podajemy parametrow;
ale ja musze przekazać parametr jako integer
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
Dzięki z pomoc już działa