Le menu déroulant (popup) dans un composant TWebBrowser est le menu classique d'Internet Explorer... même en affectant la propriété Popupmenu du composant ! Pour le personnaliser et ajouter vos propres commandes, il existe une solution :
Ajoutez la classe MSHTML
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, MSHTML;
Ajoutez FOleInPlaceActiveObject: IOleInPlaceActiveObject; dans la partie « public ».
private { Déclarations privées } public FOleInPlaceActiveObject: IOleInPlaceActiveObject; end;
Ajoutez cette fonction à votre fiche
function MouseProc(nCode: Integer; wParam, lParam: Longint): Longint; stdcall; var szClassName: array[0..255] of Char; CurPos: TPoint; X, Y: Integer; const ie_name = 'Internet Explorer_Server'; begin GetCursorPos(CurPos); x := CurPos.x; y := CurPos.y; case nCode < 0 of True: Result := CallNextHookEx(HookID, nCode, wParam, lParam) else case wParam of WM_RBUTTONDOWN,WM_RBUTTONUP: begin GetClassName(PMOUSEHOOKSTRUCT(lParam)^.HWND, szClassName, SizeOf(szClassName)); if lstrcmp(@szClassName[0], @ie_name[1]) = 0 then begin Result := HC_SKIP; Form1.popupmenu1.popup(X, Y); end else Result := CallNextHookEx(HookID, nCode, wParam, lParam); end else Result := CallNextHookEx(HookID, nCode, wParam, lParam); end; end; end;
Ajoutez ces éléments aux procédures Oncreate et OnDestroy de la fiche :
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); var iOIPAO: IOleInPlaceActiveObject; Dispatch: IDispatch; begin procedure TForm1.FormCreate(Sender: TObject); begin HookID := SetWindowsHookEx(WH_MOUSE, MouseProc, 0, GetCurrentThreadId()); end; procedure TForm1.FormDestroy(Sender: TObject); begin if HookID <> 0 then UnHookWindowsHookEx(HookID); end; end;
Des questions ? Rejoignez nous sur le forum...