![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамически связать TNotifyEvent и процедуру [D7, WinXP]
Sphinx © (2005-02-11 11:03:00)Имеем TSomeComponent в котором определено OnDoSomething вида
TSomComponent = class (TObject)
...
private
procedure FDoSomething;
public
property OnDoSomthing : TNotifyEvent read FDoSomething write FDoSomething;
...
procedure FDoSomething;
begin
if Assigned (OnDoSomeThing) then
OnDoSomthing(Self);
end;
...
и есть процедура вида:
procedure DoSome(Sender: TObject);
begin
{ какие-то операции }
end;
Как можно динамически связать событие OnDoSomething и процедуру DoSome?
примерный код который нужен:
SomeComponent := TSomeCpmponent.Create;
SomeComponent.OnDoSomthing := DoSome // <= естественно не работает
Как правильно записать последнюю строку чтобы при возникновении события в компаненте вызывалась процедура DoSome?
Заранее благдарен за ответ.
Sphinx (2005-02-11 11:31:00) [1]> jack128 © (11.02.05 11:22) [5]
Не сложно...не знал просто как правильно...
Спасибо, буду разбираться...
begin...end (2005-02-11 11:25:00) [2]> Sphinx (11.02.05 11:03)
var
MyEventHandler: TNotifyEvent;
begin
TMethod(MyEventHandler).Code := @DoSome;
TMethod(MyEventHandler).Data := SomeComponent;
SomeComponent.OnDoSomething := MyEventHandler
end
ЮЮ (2005-02-11 11:22:00) [3]Тогда описываешь ещё один класс:
TMyEvens = class
DoSome(Sender: TObject);
DoOther(Sender: TObject);
end;
создаешь при старте экземпляр MyEvens: TMyEvens
и раздаешь направо и налево его методы:
SomeComponent.OnDoSomthing := MyEvens.DoSome;
P.S.
jack128 (2005-02-11 11:22:00) [4]Sphinx (11.02.05 11:10) [3]
WinAPI проект...
тебе что, сложно класс написать?
THandlers = class
class procedure DoSamethingHandler(Sender: TObject);
end;
procedure THandlers.DoSamethingHandler(Sender: TObject);
begin
{ какие-то операции }
end;
SomeComponent.OnDoSomthing := THandlers.DoSamethingHandler;
Sphinx (2005-02-11 11:10:00) [5]В том-то и дело TForm1 нету вообще :) WinAPI проект...
Fay (2005-02-11 11:08:00) [6]Это должен быть метод
ЮЮ (2005-02-11 11:08:00) [7]procedure Form1.DoSome(Sender: TObject);
begin
{ какие-то операции }
end;
DoSome должен быть методом объекта, например формы или какого-нибудь другого, который динамически в качестве обработчика события объекта класса TSomComponent установит свой метод.