Главная страница
    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.035 c
3-1107107296
Ч_А_Й_Н_И_К
2005-01-30 20:48
2005.02.27
Запрос имени сервера, получение списка баз данных на сервере


9-1101067334
некто
2004-11-21 23:02
2005.02.27
Солнце


1-1107938331
hgd
2005-02-09 11:38
2005.02.27
Перевод миллисекунд в часы


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


1-1108022203
Игорь нтк
2005-02-10 10:56
2005.02.27
Как выбрать строку Combobox





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский