![]() |
Eigenes Kontextmenü beim Webbrowser
Hallo alle zusammen!
Ich habe folgendes Problem: Wenn ich einem WebBrowser (TWebBrowser) ein eigenes Kontextmenü verpassen will, funktioniert das zwar zunächst; sobald aber eine Seite geladen wird, wird es wieder ins Standartmenü zurückverwandelt. Wisst ihr, woran das liegt? Kann man das durch einen Trick umgehen? Man liest sich, Lorenz |
Re: Eigenes Kontextmenü beim Webbrowser
*nachobenschieb*
Weiß das denn keiner? Hat noch nie jemand das Problem gehabt? Ich will den Webbrowser für eine Vorschau benutzen, und da soll im Kontextmenü der Befehl zum Zurückwechseln in den Quelltextmodus angeboten werden (wenn jemand die Tastenkombination noch nicht kennt) MfG Lorenz |
Re: Eigenes Kontextmenü beim Webbrowser
Probier das doch mal mit dem OnLoad-Ereignis oder wie das heißt.
z.B. so:
Delphi-Quellcode:
Hoffen, es hat was geholfen. :thuimb:
procedure WebBrowser1.Onload(...);
begin WebBrowser1.PopUpMenu:=PopupMenu1; end; |
Re: Eigenes Kontextmenü beim Webbrowser
also OnLoad hab ich nicht gefunden, ich hab' onNavigateComplete verwendet.
Da funktioniert das nicht (trotzdem Danke für die Antwort) MfG Lorenz |
Re: Eigenes Kontextmenü beim Webbrowser
Hi,
Habe es mal so gelöst, dass ein lokaler Hook installiert wurde (braucht keine Dll!) und dann der Rechts-Klick abgefangen wird. Wenn die Maus über dem Webbrowser ist, wird der Rechts-Klick ignoriert, d.h das standard PopupMenu wird nicht angezeigt. Stattdessen kann man dann ein eigenes PopupMenu anzeigen. |
Re: Eigenes Kontextmenü beim Webbrowser
OK, das mag zwar gehen, aber ist das nicht ein wenig umständlich? :gruebel:
|
Re: Eigenes Kontextmenü beim Webbrowser
Zitat:
...:cat:... |
Re: Eigenes Kontextmenü beim Webbrowser
Achso, na gut. Ich hab jetz nicht an das ActiveX Applikationen-Zeug gedacht. Ich hab den WebBrowser als Kompo schon auf der Palette gehabt und mir keine Sorgen über Messages und ActiveX gemacht :oops:
|
Re: Eigenes Kontextmenü beim Webbrowser
Zitat:
Könntest du das kurz erklären oder muss ich mich da durch das Forum wälzen? Danke, MfG Lorenz |
Re: Eigenes Kontextmenü beim Webbrowser
Sorry, dass ich das Thema nochmals hervorhole.
Ich habe allerdings heute einige Zeit mit demselben Problem gekämpft... Deswegen nur noch kurz eine Ergänzung: ![]() |
Re: Eigenes Kontextmenü beim Webbrowser
Hallo Benjin,
super, dass du noch geantwortet hast, ich hatte mich für diesen Teil meines Projekts schon mit einer für mich recht schlechten Lösung (Popupmenü auf der Statusleiste) abgefunden und kann es so doch noch richtig lösen. :hello: Danke! Lorenz |
Re: Eigenes Kontextmenü beim Webbrowser
Ach, sowas gibt es auch ...
Also ich hatte auch mal dieses Problemchen und hatte mir dann über JavaScript den RechtsClick deaktiviert und darüber dann auch mein Menü anzeigen lassen. So ging es auch, nur durfte dabei der Benutzer nicht das JavaScript global deaktiviert haben :wall: |
Re: Eigenes Kontextmenü beim Webbrowser
Sieht auf den ersten Blick sehr kompliziert aus, ist es auch... :-D
Aber ist sehr einfach zu implementieren und funktioniert super. Und außerdem gehts ja da generell um "customizable twebbrowser" und nicht nur ums Kontextmenu. Ist v.a. auch nützlich wenns um Designfragen im TWebBrwoser geht. Mit den Klassen von ![]() Sind schon ziemlich nützlich diese Units. |
Re: Eigenes Kontextmenü beim Webbrowser
Beim TEmbeddedWB geht's auch einfach so:
Delphi-Quellcode:
uses
MSHTML_TLB; function TForm1.WebBrowser1ShowContextMenu(const dwID: Cardinal; const ppt: PPoint; const pcmdtReserved: IInterface; const pdispReserved: IDispatch): HRESULT; var myHTMLWindow2: IHTMLWindow2; oHTMLEvent: IHTMLEventObj; oHTMLDoc2: IHTMLDocument2; begin //next block gives access to the event object fired when the user //right-clicks inside the webBrowser control oHTMLDoc2 := EmbeddedWB1.Document as IHTMLDocument2; //interface to the displayed doc myHTMLWindow2 := oHTMLDoc2.parentWindow; //interface to the window that handles the events oHTMLEvent := myHTMLWindow2.event; //HERE is the event object if oHTMLEvent.ctrlKey = system.False then begin //if the Ctrl key is NOT pressed during right-click.. oHTMLEvent.returnValue := False; //...kills the default pop-up of IE Result := 0; //open my PopUp nemu at the absolute X and Y coordinates of the mouse PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; end; procedure TForm1.Button1Click(Sender: TObject); begin EmbeddedWB1.Navigate('www.swissdelphicenter.com'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 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-2025 by Thomas Breitkreuz