Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];

Вниз

Динамически связать 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.069 c
1-1108119530
mishabik
2005-02-11 13:58
2005.02.27
Output settings


1-1108275949
Вовик
2005-02-13 09:25
2005.02.27
Какие dll использует моя прога. Как их запускать из моей папки?


1-1108460010
Timofey
2005-02-15 12:33
2005.02.27
HTML


4-1105427654
__max__
2005-01-11 10:14
2005.02.27
Как мне узнать ID главного потока процесса с известным PID?


3-1107080299
MakedoneZ
2005-01-30 13:18
2005.02.27
Столбцы в TDBGrid.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский