Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.27;
Скачать: 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 вся ветка

Текущий архив: 2005.02.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.041 c
8-1099986502
Галинка
2004-11-09 10:48
2005.02.27
Масштабирование изображение с помощью скрола (колесика мыши)


14-1108038266
TUser
2005-02-10 15:24
2005.02.27
Полезный эксперт


14-1107722684
wl
2005-02-06 23:44
2005.02.27
Российская гуманитарная помощь


14-1108042415
Vaitek
2005-02-10 16:33
2005.02.27
Школьная физика


1-1108026196
MrFor
2005-02-10 12:03
2005.02.27
Глупый вопрос про цикл