Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2009, 12:18   #1
postal2
Форумчанин
 
Аватар для postal2
 
Регистрация: 31.10.2008
Сообщений: 215
По умолчанию Как перехватить событие родительского компонента?

Пишу свой компонент на основе TEmbeddedWB (можно прировнять к TWebbrowser), необходимо перехватить событие OnProgressChange (сначала выполнить свой код, потом передать управление обратно в onprogresschange браузера), как это сделать?
[Ferox]
postal2 вне форума Ответить с цитированием
Старый 26.08.2009, 16:52   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

так:
Код:
type
   TMyBrowser = class(TWebBrowser)
   private
      FMyProgressChange: TWebBrowser_V1ProgressChange;
   protected
      procedure innerProgressChange(ASender: TObject; Progress: Integer; ProgressMax: Integer);
   published
      property OnProgressChange: TWebBrowser_V1ProgressChange read FMyProgressChange write FMyProgressChange;
   public
      constructor Create(aOwner:TComponent); override;
   end;

constructor TMyBrowser.Create(aOwner:TComponent);
begin
   inherited Create(aOwner);
   inherited OnProgressChange := innerProgressChange;
end;

procedure TMyBrowser.innerProgressChange(ASender: TObject; Progress: Integer; ProgressMax: Integer);
begin
   // наш код
   if Assigned(FMyProgressChange) then
      FMyProgressChange(aSender, Progress, ProgressMax);
end;
или так:

Код:
type
   TMyBrowser = class(TWebBrowser)
   protected
      procedure InvokeEvent(DispID: TDispID; var Params: TDispParams); override;
   end;

procedure TMyBrowser.InvokeEvent(DispID: TDispID; var Params: TDispParams);
begin
  case DispID of
    108: begin
               // наш код
         end;
  end;
  inherited InvokeEvent(DispID, Params);
end;
// Оба примера только на основе анализа кода. Ни TWebBrowser ни TEmbeddedWB использовать не приходилось.

Последний раз редактировалось alexBlack; 26.08.2009 в 17:12.
alexBlack вне форума Ответить с цитированием
Старый 28.08.2009, 09:05   #3
postal2
Форумчанин
 
Аватар для postal2
 
Регистрация: 31.10.2008
Сообщений: 215
По умолчанию

Ругается
Код:
    FMyProgressChange: TWebBrowser_V1ProgressChange;
[Error] Unit.pas(75): Undeclared identifier: 'TWebBrowser_V1ProgressChange'

Во втором ругается
Код:
 procedure InvokeEvent(DispID: TDispID; var Params: TDispParams); override;
на [Error] Unit.pas(91): Undeclared identifier: 'TDispID'
и [Error] Unit.pas(91): Undeclared identifier: 'TDispParams'

и здесь на несоответствие параметров
Код:
 inherited InvokeEvent(DispID, Params);
[Error] Unit.pas(6018): Types of actual and formal var parameters must be identical
[Ferox]

Последний раз редактировалось postal2; 28.08.2009 в 09:12.
postal2 вне форума Ответить с цитированием
Старый 28.08.2009, 12:31   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от postal2 Посмотреть сообщение
Ругается
Код:
    FMyProgressChange: TWebBrowser_V1ProgressChange;
[Error] Unit.pas(75): Undeclared identifier: 'TWebBrowser_V1ProgressChange'
uses SHDocVw
или SHDocVw_EWB в Вашем случае. И посмотрите какой тип у OnProgressChange в Вашем компоненте. Скорее всего TEWB_V1ProgressChange. В примере наследование от TWebBrowser.

Цитата:
Во втором ругается
Код:
 procedure InvokeEvent(DispID: TDispID; var Params: TDispParams); override;
на [Error] Unit.pas(91): Undeclared identifier: 'TDispID'
и [Error] Unit.pas(91): Undeclared identifier: 'TDispParams'

и здесь на несоответствие параметров
Код:
 inherited InvokeEvent(DispID, Params);
[Error] Unit.pas(6018): Types of actual and formal var parameters must be identical
TDispID и TDispParam описаны в ActiveX, несоответсвие типов скорее всего из-за другого описания метода в Вашем классе.

м.б.:
procedure InvokeEvent(DispID: TDispID; var Params: TVariantArray);
alexBlack вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перехватить нажатие клавиш в Windows? JoanM Win Api 15 31.05.2013 14:42
Заменить стандартное событие компонента при создании своего. postal2 Компоненты Delphi 6 28.08.2009 11:01
Как перехватить нажатие клавиши Windows? UnD)eaD)Snake Win Api 3 16.03.2009 18:21
Как перехватить обращения к принтеру? Classic Win Api 2 16.08.2007 11:07
как перехватить открытие чужого приложенияпытаюсь перехватить открытие любого приложе rpy3uH Win Api 2 02.12.2006 12:12