Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как присвоить обработчик события в runtime?


Автор: Motorocker 3.10.2007, 12:18
Создаю компонент в runtime. Формы не используются. 
У компонента есть событие onProgress. 
Как на него навесить мою процедуру IOProgress, чтобы на onProgress вызывалась она? 
Надо, чтобы для OnProgress вызывался обработчик IOProgress. Параметры совпадают.

Если есть форма, то всё получается. Тут же формы нет. Уже и не знаю, какие ключевые слова для поиска задать, что и как искать. 
Чтение текстов про процедурные типы, события не помогает.

Тип обработчика TIEProgressEvent.

Цитата
TImageEnIO.OnProgress
Declaration:
property OnProgress: TIEProgressEvent;

TIEProgressEvent
Declaration:
type TIEProgressEvent = procedure(Sender: TObject; per: integer) of object;


Посоветовали такой код:

Код
procedure _OnTimer_(Sender: TObject); begin
  MessageBeep(0);
end;


Код
var
  M: TMethod;
begin
  with TTimer.Create(Self) do begin
    M.Code := @_OnTimer_;
    OnTimer := TNotifyEvent(M);
  end;
end;


Код примера работает, но когда переношу на компонент, переменная per (кол-во обработанных процентов) выдаёт непонятную константу 

Код
procedure IOProgress(Sender: TObject; per: integer); begin
   //
end;


Код
img:= TImageEnIO.Create(nil);
M.Code:= @IOProgress;
M.Data:= img;
img.OnProgress:= TIEProgressEvent(M); 

Если стандартно положить компонент на форму, обработчик выполняет всё как надо, проценты показываются. 
Если вот так же создавать динамически, то никак.

Автор: Bose 3.10.2007, 12:42
Код
img.OnProgress:= IOProgress; 


Только.... Чтобы это заработало, процедура IOProgress должна быть методом класса.

Автор: DonPager 3.10.2007, 13:45
А ты при создании имя не забываешь присвоить?
или получается 
Код

with TMyP.Create(Self) do ...

???

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)