![]() |
Kontextmenü des TWebbrowser überall...
ich habe für den twebbrowser ein eigenes popupmenü:
Delphi-Quellcode:
mein problem ist, dass das kontextmenü über allen komponenten zu sehen ist, des sollte aber nur für den webbrowser gelten.
function MouseProc(nCode: Integer; wParam, lParam: Longint): Longint; stdcall;
var szClassName: array[0..255] of Char; const ie_name = 'Internet Explorer_Server'; begin 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 Result := HC_SKIP else Result := CallNextHookEx(HookID, nCode, wParam, lParam); end else Result := CallNextHookEx(HookID, nCode, wParam, lParam); end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin HookID := SetWindowsHookEx(WH_MOUSE, MouseProca, 0, GetCurrentThreadId()); end; procedure TForm1.FormDestroy(Sender: TObject); begin if HookID <> 0 then UnHookWindowsHookEx(HookID); end; please help... ;) grüße horst |
Re: Kontextmenü des TWebbrowser überall...
hat wirklich niemand eine ahnung oder einen klitzekleinen hinweis??
wollte das thema nochmal ganz oben haben, um evt doch noch eine antwort zu bekommen :) viele grüße horst |
Re: Kontextmenü des TWebbrowser überall...
Wo hast du da das Popupmenü eingebaut? Dieser Code dient eigentlich nur zum verhindern des Popupmenüs im TWebbrowser.
Dein eigenes Menü muss ja dann irgendwo aufgerufen werden, z.B. so:
Delphi-Quellcode:
var
P: TPoint; //....... P := PMOUSEHOOKSTRUCT(lParam)^.pt; GetClassName(PMOUSEHOOKSTRUCT(lParam)^.HWND, szClassName, SizeOf(szClassName)); if lstrcmp(@szClassName[0], @ie_name[1]) = 0 then begin Result := HC_SKIP; Form1.WebBrowser1.PopupMenu.Popup(P.X, P.Y); end else Result := CallNextHookEx(HookID, nCode, wParam, lParam); //....... |
Re: Kontextmenü des TWebbrowser überall...
hallo...
stimmt du hast recht... aufrufen tue ich das so.... über einen button
Delphi-Quellcode:
habe die zeile nun eingefügt aber es funktioniert immer noch nicht.
HookID := SetWindowsHookEx(WH_MOUSE, MouseProc, 0, GetCurrentThreadId());
und function MouseProc(nCode: Integer; wParam, lParam: Longint): Longint; stdcall; var szClassName: array[0..255] of Char; const ie_name = 'Internet Explorer_Server'; begin case nCode < 0 of True: Result := CallNextHookEx(HookIDb, 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 Result := HC_SKIP; // Form1.PopUpMenu1.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); Form1.WebBrowser1.PopupMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y); end else Result := CallNextHookEx(HookIDb, nCode, wParam, lParam); end; end; end;
Delphi-Quellcode:
gruß
Form1.WebBrowser1.PopupMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
horst |
Re: Kontextmenü des TWebbrowser überall...
danke...
ich kriege damit zwar aich das popupmenü zu sehen, leider aber immer noch über allen anderen komponenten auf meiner form.
Code:
function MouseProc(nCode: Integer; wParam, lParam: Longint): Longint; stdcall;
var P: TPoint; szClassName: array[0..255] of Char; const ie_name = 'Internet Explorer_Server'; begin case wParam of WM_RBUTTONDOWN, WM_RBUTTONUP: begin P := PMOUSEHOOKSTRUCT(lParam)^.pt; GetClassName(PMOUSEHOOKSTRUCT(lParam)^.HWND, szClassName, SizeOf(szClassName)); if lstrcmp(@szClassName[0], @ie_name[1]) = 0 then Result := HC_SKIP; Form1.WebBrowser1.PopupMenu.Popup(P.X, P.Y); end else Result := CallNextHookEx(HookIDb, nCode, wParam, lParam); end; end; |
Re: Kontextmenü des TWebbrowser überall...
es klappt...musste das
Delphi-Quellcode:
rausnehmen
Result := HC_SKIP;
|
Re: Kontextmenü des TWebbrowser überall...
Der Unrerschied zwischen meinem und deinem Code ist:
Du musst ein begin nach der If-Zeile einfügen und ein end; nach der Popup-Zeile. Dann kannst du auch sicherheitshalber das
Delphi-Quellcode:
drin lassen, also so:
Result := HC_SKIP;
Delphi-Quellcode:
if lstrcmp(@szClassName[0], @ie_name[1]) = 0 then
begin Result := HC_SKIP; Form1.WebBrowser1.PopupMenu.Popup(P.X, P.Y); end; |
Re: Kontextmenü des TWebbrowser überall...
danke...das geht, ich habe ehrlich gesagt nicht verstanden wofür diese
Delphi-Quellcode:
gebraucht wird.
Result := HC_SKIP;
du bestimmt, magst du es mir erklären? gruß horst |
Re: Kontextmenü des TWebbrowser überall...
Das sorgt dafür, dass das Original-Menü des TWebBrowser nicht aufgerufen wird, also die WM_BUTTONx Nachrichten werden nicht an den TWebBrowser weitergegeben, so als hätte das Ereignis nie stattgefunden.
Die angesprochene Zeile ist aber eigentlich nur dazu da, der MouseProc einen ordentlichen Rückgabewert in das result zu übergeben, normalerweise wird das ja von CallNextHookEx() erledigt. |
Re: Kontextmenü des TWebbrowser überall...
vielen dank
so ungefähr habe ich das verstanden... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz