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

Свойства - события   Найти похожие ветки 

 
Константинов ©   (2006-05-09 01:53) [0]

В компоненте есть некое  свойство - событие.
Во время выполнения одной из внутренних процедур компонента необходимо сгенерировать это событие и не дожидаясь, пока пользователь обработает его продолжить выполнение внутренней процедуры.

Пока у меня примерно так:

TMyComponent = class(TComponent)
private
 fOnMyEvent : TNotifyEvent;
 procedure MyProcedure;
protected
 procedure DoMyEvent; dynamic;
published
 property OnMyEvent : TNotifyEvent read fOnMyEvent write fOnMyEvent;
end;

implementation

TMyComponent.DoMyEvent;
Begin
 If assigned(fOnMyEvent) then fOnMyEvent(Self);
End;

TMyComponent.MyProcedure;
 Var I : integer;
Begin
 For I := 0 to Max do
 Begin
   …
   DoMyEvent;
   …
 End;
End;

Думаю нужно применять PostMessage. Но как, что-то вроде:

Private
     procedure MyProcedure2( var message : TMessage); message WM_USER + 1;

implementation

TMyComponent.MyProcedure2( var message : TMessage);
Begin
 If Assigned(fOnMyEvent) then fOnMyEvent(self);
End;

TMyComponent.MyProcedure;
 Var I : integer;
Begin
 For I := 0 to Max do
 Begin
   …
   PostMessage( ??? ,WM_USER + 1,0,0);
   …
 End;
End;

У класса TComponent нет хендла
Куда адресовать PostMessage?

Application.Handle?

Подскажите как правильно реализовать?
Заранее спасибо.


 
Юрий Зотов ©   (2006-05-09 05:32) [1]

Компонент может создать невидимое окно, тогда адресат появится. Для примера см. TTimer.


 
evvcom ©   (2006-05-10 08:56) [2]

А какой смысл в этом? Ну отработай процедуру до конца, раз так надо, а потом DoMyEvent;



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

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



Память: 0.45 MB
Время: 0.042 c
15-1168412976
Postalll
2007-01-10 10:09
2007.01.28
Визуальные компоненты


15-1167937516
serko
2007-01-04 22:05
2007.01.28
Синхронизациия времени...


6-1156605057
kernel
2006-08-26 19:10
2007.01.28
WOL


2-1168287894
Dim..ON
2007-01-08 23:24
2007.01.28
загрузка компьютера


1-1165397551
newbie2
2006-12-06 12:32
2007.01.28
Поясните почему так не работает?




   Наверх