Главная страница
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.049 c
1-1107938996
dream
2005-02-09 11:49
2005.02.27
Как извлеч картинку из ImageList в Tbitmap ?


1-1107936598
Suvit_
2005-02-09 11:09
2005.02.27
Выравнивание ширины текста в RichEdit


4-1105963795
mutabor
2005-01-17 15:09
2005.02.27
mdi форма


1-1107956795
YuriS
2005-02-09 16:46
2005.02.27
DateTimePicker


6-1102434677
Klopan
2004-12-07 18:51
2005.02.27
FTP server