Вниз
Скачать: CL | DM;

Динамически связать TNotifyEvent и процедуру   Найти похожие ветки 

← →
Sphinx   (2005-02-11 11:03) [0]

Имеем 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?

Заранее благдарен за ответ.


← →
Fay ©   (2005-02-11 11:08) [1]

Это должен быть метод


← →
ЮЮ ©   (2005-02-11 11:08) [2]

procedure Form1.DoSome(Sender: TObject);
begin
{ какие-то операции }
end;

DoSome должен быть методом объекта, например формы или какого-нибудь другого, который динамически в качестве обработчика события объекта класса TSomComponent установит свой метод.


← →
Sphinx   (2005-02-11 11:10) [3]

В том-то и дело TForm1 нету вообще :) WinAPI проект...


← →
ЮЮ ©   (2005-02-11 11:22) [4]

Тогда описываешь ещё один класс:

TMyEvens = class
 DoSome(Sender: TObject);
 DoOther(Sender: TObject);
end;

создаешь при старте экземпляр MyEvens: TMyEvens
и раздаешь направо и налево его методы:  

SomeComponent.OnDoSomthing := MyEvens.DoSome;

P.S.


← →
jack128 ©   (2005-02-11 11:22) [5]

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;


← →
begin...end ©   (2005-02-11 11:25) [6]

> Sphinx   (11.02.05 11:03)

var
 MyEventHandler: TNotifyEvent;
begin
 TMethod(MyEventHandler).Code := @DoSome;
 TMethod(MyEventHandler).Data := SomeComponent;
 SomeComponent.OnDoSomething := MyEventHandler
end


← →
Sphinx   (2005-02-11 11:31) [7]

> jack128 ©   (11.02.05 11:22) [5]

Не сложно...не знал просто как правильно...

Спасибо, буду разбираться...



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.024 c
6-1103499595
Beglec
2004-12-20 02:39
2005.02.27
Проблема с WinPcap.


10-1084467392
VK220
2004-05-13 20:56
2005.02.27
Почему функция _AddRef (как и _Release) вызывается не


14-1107428519
ArMellon
2005-02-03 14:01
2005.02.27
Кому не лень...


1-1107944794
MTsv DN
2005-02-09 13:26
2005.02.27
Файлы LIB


14-1107432712
КаПиБаРа
2005-02-03 15:11
2005.02.27
Опрос - рефакторинг




   Наверх