Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка сообщений IE, Пробема с обработкой OnNewWindow2 
:(
    Опции темы
niro86
Дата 23.11.2009, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 23.11.2009

Репутация: нет
Всего: нет



Привет.  Только начал разбираться с OLE и COM. В принципе многое ясно, но вот с перехватом сообщений -труба :-( 
Если я в консольном приложении пытаюсь в коде, приведенном ниже, обработать событие: OnBeforeNavigate2, то все происходит нормально. Но если я пытаюсь обработать таким образом сообщение OnNewWindow2, то получаю ошибку: Incompatible types: 'OleVariant' and 'IDispatch'
Код

type
TEventHolder = class
public
procedure MyBeforeNavigate2(Sender: TObject; var pDisp, URL, Flags, TargetFrameName, PostData, Headers, Cancel: OleVariant);
procedure MyOnNewWindow2 (Sender: TObject; var ppDisp: IDispatch; var Cancel: WordBool);
end;

var 
IE: TInternetExplorer;
EventHolder: TEventHolder;


procedure TEventHolder.MyOnNewWindow2 (Sender: TObject; var ppDisp: IDispatch; var Cancel: WordBool);
begin
////
end;

procedure TEventHolder.MyBeforeNavigate2(Sender: TObject; var pDisp, URL, Flags, TargetFrameName, PostData, Headers, Cancel: OleVariant);
begin
////
end;

begin
CoInitialize(nil);
IE:=TInternetExplorer.Create(nil);
IE.Visible:=True;
EventHolder := TEventHolder.Create;
IE.OnNewWindow2:=EventHolder.MyOnNewWindow2;
IE.Navigate('c:\1.html');
CoUninitialize;
end.

Что я делаю не так и как нужно правильно перехватить событие OnNewWindow2???
PM MAIL   Вверх
Rrader
  Дата 27.11.2009, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 6
Всего: 191



Исправить декларацию на:
Код

procedure MyOnNewWindow2(Sender: TObject; var ppDisp: OleVariant; var Cancel: OleVariant);



--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
niro86
Дата 27.11.2009, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 23.11.2009

Репутация: нет
Всего: нет



Цитата(Rrader @ 27.11.2009,  16:23)
Исправить декларацию на:
Код

procedure MyOnNewWindow2(Sender: TObject; var ppDisp: OleVariant; var Cancel: OleVariant);

Да, я уже с этим разобрался. Код вроде как заработал, только вот перехватить событие OnNewWindow2 он всеравно не в состоянии...хоть застрелись :(

Код

program qqq;

uses
 Windows,
 Messages,
 SysUtils,
 Variants,
 Classes,
 Graphics,
 OLEauto,
 Ole2,
 Controls,
 Forms,
 ActiveX,
 Dialogs,
 ShDocVw,
 MSHTML_TLB in '..\..\..\..\Program Files\Program Files\Borland\Delphi7\Imports\MSHTML_TLB.pas';

type
TEventHolder = class
public
procedure MyBeforeNavigate2(Sender: TObject; var pDisp, URL, Flags, TargetFrameName, PostData, Headers, Cancel: OleVariant);
procedure MyOnNewWindow2 (Sender: TObject; var ppDisp: OleVariant; var Cancel: OleVariant);
end;

var
IE: TInternetExplorer;
EventHolder: TEventHolder;

procedure TEventHolder.MyOnNewWindow2 (Sender: TObject; var ppDisp: OleVariant; var Cancel: OleVariant);
begin
ppDisp:=ie.DefaultInterface;
end;

procedure TEventHolder.MyBeforeNavigate2(Sender: TObject; var pDisp, URL, Flags, TargetFrameName, PostData, Headers, Cancel: OleVariant);
begin
///
end;

begin
IE:=TInternetExplorer.Create(nil);
IE.Connect;
IE.Visible:=True;
EventHolder := TEventHolder.Create;
IE.onBeforeNavigate2:=EventHolder.MyBeforeNavigate2;
IE.onnewwindow2:=EventHolder.Myonnewwindow2;
IE.Navigate('c:\1.html');
sleep(10000);
end.


Программа открывает окно IE и... в нем ни чего непроисходит, по истечении паузы 10 сек. моя программа закрывается и только после этого загружается страница, а программа то с обработчиком уже закрылась и что делать не ясно... Почему так происходит и как отслеживать когда пользыватель перейдет по какой либо ссылке???
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0573 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.