Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Kontextmenü des TWebbrowser überall... (https://www.delphipraxis.net/17948-kontextmenue-des-twebbrowser-ueberall.html)

horst 11. Mär 2004 21:39


Kontextmenü des TWebbrowser überall...
 
ich habe für den twebbrowser ein eigenes popupmenü:
Delphi-Quellcode:
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;
mein problem ist, dass das kontextmenü über allen komponenten zu sehen ist, des sollte aber nur für den webbrowser gelten.
please help...
;)
grüße horst

horst 28. Aug 2004 11:26

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

scp 28. Aug 2004 12:44

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);
//.......

horst 28. Aug 2004 16:35

Re: Kontextmenü des TWebbrowser überall...
 
hallo...
stimmt du hast recht...
aufrufen tue ich das so.... über einen button
Delphi-Quellcode:
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;
habe die zeile nun eingefügt aber es funktioniert immer noch nicht.
Delphi-Quellcode:
Form1.WebBrowser1.PopupMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
gruß
horst

horst 28. Aug 2004 17:01

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;

horst 28. Aug 2004 17:18

Re: Kontextmenü des TWebbrowser überall...
 
es klappt...musste das
Delphi-Quellcode:
Result := HC_SKIP;
rausnehmen

scp 28. Aug 2004 19:42

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:
Result := HC_SKIP;
drin lassen, also so:
Delphi-Quellcode:
        if lstrcmp(@szClassName[0], @ie_name[1]) = 0 then
        begin
          Result := HC_SKIP;
          Form1.WebBrowser1.PopupMenu.Popup(P.X, P.Y);
        end;

horst 28. Aug 2004 23:05

Re: Kontextmenü des TWebbrowser überall...
 
danke...das geht, ich habe ehrlich gesagt nicht verstanden wofür diese
Delphi-Quellcode:
Result := HC_SKIP;
gebraucht wird.
du bestimmt, magst du es mir erklären?

gruß
horst

scp 29. Aug 2004 01:10

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.

horst 29. Aug 2004 01:19

Re: Kontextmenü des TWebbrowser überall...
 
vielen dank
so ungefähr habe ich das verstanden...


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz