Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Eigenes Kontextmenü beim Webbrowser (https://www.delphipraxis.net/19488-eigenes-kontextmenue-beim-webbrowser.html)

lorenz 4. Apr 2004 13:35


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

lorenz 21. Mai 2004 13:58

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

Ultimator 21. Mai 2004 14:04

Re: Eigenes Kontextmenü beim Webbrowser
 
Probier das doch mal mit dem OnLoad-Ereignis oder wie das heißt.
z.B. so:
Delphi-Quellcode:
procedure WebBrowser1.Onload(...);
begin
WebBrowser1.PopUpMenu:=PopupMenu1;
end;
Hoffen, es hat was geholfen. :thuimb:

lorenz 21. Mai 2004 14:12

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

toms 21. Mai 2004 14:22

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.

Ultimator 21. Mai 2004 14:30

Re: Eigenes Kontextmenü beim Webbrowser
 
OK, das mag zwar gehen, aber ist das nicht ein wenig umständlich? :gruebel:

sakura 21. Mai 2004 14:43

Re: Eigenes Kontextmenü beim Webbrowser
 
Zitat:

Zitat von Ultimator
aber ist das nicht ein wenig umständlich? :gruebel:

Eigentlich nicht, da es relativ leicht ist und das ActiveX des Webbrowsers genau genommen eine autonome Applikation mit eigener Messageroutine ist. Dadurch werden solche Informationen nicht an die Parent-App weitergegeben, außer als COM-Event, welches hier nicht der Fall ist. Somit ist der Hook wohl die einfachste und eleganteste Lösung ;)

...:cat:...

Ultimator 21. Mai 2004 14:52

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:

lorenz 21. Mai 2004 14:58

Re: Eigenes Kontextmenü beim Webbrowser
 
Zitat:

Zitat von toms
ein lokaler Hook installiert wurde (braucht keine Dll!)
und dann der Rechts-Klick abgefangen wird.

Tut mir leid, ich bin nicht so gut in Delphi.

Könntest du das kurz erklären oder muss ich mich da durch das Forum wälzen?

Danke, MfG

Lorenz

Benjin 15. Feb 2005 21:13

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:
Hier gibt es eine ausführliche und professionelle Lösung, wie TWebbrowser Eigenschaften modifiziert werden können.

lorenz 16. Feb 2005 15:55

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

himitsu 16. Feb 2005 16:14

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:

Benjin 16. Feb 2005 16:23

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 www.delphidabbler.com kann man auch gut mit CSS rumspielen.

Sind schon ziemlich nützlich diese Units.

toms 12. Mär 2005 18:48

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