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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2015, 12:21   #1
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию IHTMLDocument3. Отлов событий.

Всем доброго. Необходимо обработать события, которые производит webBrowser в окне моей программы. Для этого определил интерфейс-ловец событий:
Код:
webBrowser2.Document.QueryInterface(IID_IHTMLDocument3, doc3);
Далее назначил ловцу событие:
Код:
doc3.attachEvent('onclick',idispOnClick);
idispOnClick - интерфейс, который будет ловить.
После чего каждый клик по любому элементу вызывает метод этого интерфейса:
Код:
function TWebBrowserEventOnClick.Invoke(DispID: LongInt; const iid: TGUID;
  LocaleID: longint; Flags: Word; var params; VarResult, ExcepInfo,
  ArgErr: pointer): HResult; stdcall;
begin
  
  Result := S_OK;
end;
Все красиво. Событие срабатывает как полагается, но я чет потерялся. Не могу понять как в этом методе понять какой элемент вызвал событие клика. Т.е. по факту я хочу получить название тега, на который кликнул.

Подскажите как дальше работать с событием таким.
пока что рою MSDN, но вдруг кто быстренько подтолкнет в нужную сторону - буду благодарен
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.05.2015, 16:02   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Там же передается массив с аргументами - скорее всего там в варианте закатан IDispatch event объекта, у которого можно вопрошать что к чему.

https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

Сам такого не делал, так что все на уровне предположений
waleri вне форума Ответить с цитированием
Старый 20.05.2015, 18:59   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я вот до такого топетрав:
1) В том методе получаю окошко: htmlwnd:=IHTMLWindow2(ihtm.parentWi ndow)
2) Потом получаю текущее событие: ev:=IHTMLEventObj(htmlwnd.Get_event );
Ну и дело оказывается в шляпе.
ev.srcElement дает элемент, который вызвал событие, а у него уже есть свойства tagName, id и так далее.

Вот как оформил:
Код:
procedure OnEventProc;
var ev:IHTMLEventObj; evrec:TIExplorerEventRecord;
  htmlwnd:IHTMLWindow2;
  evelement:IHTMLElement;
begin
   if Assigned(IEMems.MyIE.OnEvent) then begin
    htmlwnd:=IEMems.ihtm.parentWindow;
    ev:=htmlwnd.Get_event;
    if ev<>nil then begin

      evelement:=ev.srcElement;
      evrec.eventName:=ev.type_;
      if evelement<>nil then begin
        evrec.Tag:=evelement.tagName;
        evrec.ID:=evelement.id;
        evrec.code:=VarToStr(evelement.getAttribute('if'+evrec.eventName,2));
        evrec.X:=ev.x;
        evrec.Y:=ev.y;
        evrec.KeyPressedCode:=ev.keyCode;
        evrec.KeyPressedChar:=Utf8ToAnsi(chr(evrec.KeyPressedCode));
        evrec.MouseButton:=ev.button;
      end else begin
        evrec.Tag:='';
        evrec.ID:='';
        evrec.code:='';
        evrec.KeyPressedChar:=#0;
        evrec.KeyPressedCode:=0;
        evrec.X:=-1;
        evrec.Y:=-1;
        evrec.MouseButton:=-2;
      end;
      if evrec.code<>'' then
         IEMems.MyIE.OnEvent(IEMems.MyIE,evrec);
    end;
   end;
end;
Где:
ihtm: IHTMLDocument2; заранее полученный следующим кодом:
Код:
webBrowser2.Document.QueryInterface(IID_IHTMLDocument2, ihtm);
Ее в тот метод и поместил.

evrec - это запись, куда я складываю нужные мне параметры событий.
Пока все красиво, только вот надо еще разобраться с механизмом срабатывания этих событий в бравзере. Плаваю я еще в этом деле.

А вскоре пополню тему о своем ЯВУ новой версией, у которой прикручен IE в качестве GUI, и сам интерпретатор в качестве скриптового двига.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отлов ссылок W0LF Работа с сетью в Delphi 2 24.04.2010 18:16
Отлов Курсора. BARNEY Общие вопросы Delphi 3 04.08.2009 09:16
Отлов событий Antoha Общие вопросы Delphi 3 26.10.2008 10:20
Отлов кликов мыши LAFUDR Помощь студентам 9 24.05.2008 01:32
Sreen Saver отлов событий Alexoid Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 28.04.2008 15:41