AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Kontextmenü des TWebbrowser überall...
Thema durchsuchen
Ansicht
Themen-Optionen

Kontextmenü des TWebbrowser überall...

Ein Thema von horst · begonnen am 11. Mär 2004 · letzter Beitrag vom 29. Aug 2004
Antwort Antwort
horst

Registriert seit: 1. Jul 2003
347 Beiträge
 
Delphi 2007 Professional
 
#1

Kontextmenü des TWebbrowser überall...

  Alt 11. Mär 2004, 21:39
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
  Mit Zitat antworten Zitat
horst

Registriert seit: 1. Jul 2003
347 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Kontextmenü des TWebbrowser überall...

  Alt 28. Aug 2004, 11:26
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
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#3

Re: Kontextmenü des TWebbrowser überall...

  Alt 28. Aug 2004, 12:44
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);
//.......
  Mit Zitat antworten Zitat
horst

Registriert seit: 1. Jul 2003
347 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Kontextmenü des TWebbrowser überall...

  Alt 28. Aug 2004, 16:35
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.
Form1.WebBrowser1.PopupMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y); gruß
horst
  Mit Zitat antworten Zitat
horst

Registriert seit: 1. Jul 2003
347 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Kontextmenü des TWebbrowser überall...

  Alt 28. Aug 2004, 17:01
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;
  Mit Zitat antworten Zitat
horst

Registriert seit: 1. Jul 2003
347 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Kontextmenü des TWebbrowser überall...

  Alt 28. Aug 2004, 17:18
es klappt...musste das Result := HC_SKIP; rausnehmen
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#7

Re: Kontextmenü des TWebbrowser überall...

  Alt 28. Aug 2004, 19:42
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
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;
  Mit Zitat antworten Zitat
horst

Registriert seit: 1. Jul 2003
347 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Kontextmenü des TWebbrowser überall...

  Alt 28. Aug 2004, 23:05
danke...das geht, ich habe ehrlich gesagt nicht verstanden wofür diese
Result := HC_SKIP; gebraucht wird.
du bestimmt, magst du es mir erklären?

gruß
horst
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#9

Re: Kontextmenü des TWebbrowser überall...

  Alt 29. Aug 2004, 01:10
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.
  Mit Zitat antworten Zitat
horst

Registriert seit: 1. Jul 2003
347 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Kontextmenü des TWebbrowser überall...

  Alt 29. Aug 2004, 01:19
vielen dank
so ungefähr habe ich das verstanden...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 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