Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как заменить стандартное меню Internet Explorera на своё [D7, Win95/98, WinME, NT4, Win2k, WinXP]


GreySerg ©   (2003-08-26 18:03:00) 

Как заменить стандартное меню Internet Explorera на своё
в компоненте TWebBrowser, когда открыт html документ?


Rouse_   (2003-08-28 02:31:00) [1]

Просто подключи к проекту данный юнит:

unit WbPopup;

interface

implementation

uses Windows,Controls,Messages,ShDocVw, Forms, frmMain;

var
HMouseHook:THandle;
Pop: Boolean;

function MouseProc(
nCode: Integer; // hook code
WP: wParam; // message identifier
LP: lParam // mouse coordinates
):Integer;stdcall;
var MHS:TMOUSEHOOKSTRUCT;
WC:TWinControl;
begin
Result:=CallNextHookEx(HMouseHook,nCode,WP,LP);
if nCode=HC_ACTION then
begin
MHS:=PMOUSEHOOKSTRUCT(LP)^;
if ((WP=WM_RBUTTONDOWN) or (WP=WM_RBUTTONUP)) then
begin
WC:=FindVCLWindow(MHS.pt);
if (WC is TWebBrowser) then
begin
Result:=1;
if (TWebBrowser(WC).PopupMenu<>nil) and (WP=WM_RBUTTONUP) then
begin
if Pop then Exit;
Pop := True;
TWebBrowser(WC).PopupMenu.Popup(MHS.pt.x,MHS.pt.y);
Pop := False;
end;
end;
end;
end;
end;

initialization

HMouseHook:=SetWindowsHookEx(WH_MOUSE,@MouseProc,HInstance,GetCurrentT hreadID);

finalization
try
UnhookWindowsHookEx(HMouseHook);
Sleep(100);
CloseHandle(HMouseHook);
except

end;
end.


Код взят уже не помню откуда, модифицирован, так как были явные грубые ошибки, но осталась еще одна, лениво искать (модуль мне всеравно не нужен) при закрытии программы иногда выдает ошибку (на CloseHandle(HMouseHook);), поэтому лучше назначить собственный обработчик ошибок.

Желаю успехов


Тих   (2003-08-28 00:42:00) [2]

Ну... если поможет :) ...

1) Создать экземпляр Automation Object, реализующий IDispatch и перегружающий метод Invoke. В Invoke проверить DispId метода HTMLDocumentEvents2::oncontextmenu и вызвать свой обработчик.
2) Получить указатель на IHTMLBodyElement из WebBrowser.Document, из body получить IConnectionPointCOntainer, опросить Container на HTMLDocumentEvents2, получить указатель на IConnectionPoint, вызвать IConnectionPoint::Advise, передав в этот метод указатель на экземпляр объекта первого пункта.


nikkie   (2003-08-27 14:28:00) [3]

посмотри как там сделано и сделай также.


GreySerg   (2003-08-27 11:22:00) [4]

а без использования компоненты ? используя стандартную TWebBrowser


nikkie   (2003-08-26 18:54:00) [5]

Компонента TEmbeddedWB
событие OnShowContextMenu
http://www.euromind.com/iedelphi/


Наверх

Титульная страница Поиск, карта сайта Написать письмо