Kann mir mal jemand helfen? Hab hier Webbrowser-Control in dem icke eine
temporaere HTM-Datei im lokalen Dateisystem öffne.
Dem Webbrowser moechte ich ein ContextMenu verpassen in dem versch.
Actions, je nach dem, ob was im Webbrowser ausgewählt ist nutzbar sein
sollen.
Leideer finde ich kein Event das die Änderung einer Auswahl signalisiert.
Was kann ich hier tun um zu erkennen wenn Auswahl geändert wurde?
Salut, Renè
> Kann mir mal jemand helfen? Hab hier Webbrowser-Control in dem icke
> eine
> temporaere HTM-Datei im lokalen Dateisystem öffne.
> Dem Webbrowser moechte ich ein ContextMenu verpassen in dem versch.
> Actions, je nach dem, ob was im Webbrowser ausgewählt ist nutzbar
> sein
> sollen.
Geht zum Beispiel über DHTML:
[Custom Context Menus, Print from Script, Great Dialogs]
http://msdn.microsoft.com/en-us/library/bb264003.aspx
[oncontextmenu Event (A, ADDRESS, APPLET, ...)]
http://msdn.microsoft.com/en-us/library/ms536914.aspx
oder gleich persistent erweitert:
[Link mit Titel in die Zwischenablage]
http://dzaebel.net/LinkTitle.htm
________________
Wenn ein eigenes WinForm-ContextMenuStrip gebunden
(bzw. mit dem des HTML-DOM ersetzt) werden soll, dann zum Beispiel:
WebBrowser wb = new WebBrowser();
private void Form1_Load(object sender, EventArgs e)
{
wb.Dock = DockStyle.Fill; Controls.Add(wb);
Uri uri; Uri.TryCreate(Path.Combine(Application.StartupPath,
"HTMLPage1.htm"), UriKind.Absolute, out uri);
wb.DocumentCompleted +=
new WebBrowserDocumentCompletedEventHandler(
wb_DocumentCompleted);
wb.Navigate(uri);
}
void wb_DocumentCompleted(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
wb.Document.ContextMenuShowing +=
new HtmlElementEventHandler(
Document_ContextMenuShowing);
}
void Document_ContextMenuShowing(object sender,
HtmlElementEventArgs e)
{
e.ReturnValue = false;
contextMenuStrip1.Show(Cursor.Position);
}
________
> je nachdem, was im Browser ausgewählt ist [...]
das ist mehrdeutig, aber man kann über das DOM
alles über "ausgewählte" Elemente erfahren.
Das aktive ist normal: wb.Document.ActiveElement
Ansonsten weiterführende Techniken:
[Eigenes HTML im WebBrowser einfügen]
http://dzaebel.net/MshtmlTab.htm
[MSHTML ohne WebBrowser als Parser benutzen]
http://dzaebel.net/MshtmlParser.htm
ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET
>> Kann mir mal jemand helfen? Hab hier Webbrowser-Control in dem icke
>> eine
>> temporaere HTM-Datei im lokalen Dateisystem öffne. Dem Webbrowser
>> moechte ich ein ContextMenu verpassen in dem versch. Actions, je nach
>> dem, ob was im Webbrowser ausgewählt ist nutzbar sein
>> sollen.
>
> Geht zum Beispiel über DHTML:
>
> [Custom Context Menus, Print from Script, Great Dialogs]
> http://msdn.microsoft.com/en-us/library/bb264003.aspx
>
> [oncontextmenu Event (A, ADDRESS, APPLET, ...)]
> http://msdn.microsoft.com/en-us/library/ms536914.aspx
>
> oder gleich persistent erweitert:
>
> [Link mit Titel in die Zwischenablage] http://dzaebel.net/LinkTitle.htm
Aha, verstehe. Da hab ich am falschen Ende probiert. Das ich das in der
Registry umsetzen muß war mir unklar.
> Wenn ein eigenes WinForm-ContextMenuStrip gebunden (bzw. mit dem des
> HTML-DOM ersetzt) werden soll, dann zum Beispiel:
>
> WebBrowser wb = new WebBrowser();
>
> private void Form1_Load(object sender, EventArgs e) {
> wb.Dock = DockStyle.Fill; Controls.Add(wb); Uri uri;
> Uri.TryCreate(Path.Combine(Application.StartupPath,
> "HTMLPage1.htm"), UriKind.Absolute, out uri);
> wb.DocumentCompleted +=
> new WebBrowserDocumentCompletedEventHandler(
> wb_DocumentCompleted);
> wb.Navigate(uri);
> }
>
> void wb_DocumentCompleted(object sender,
> WebBrowserDocumentCompletedEventArgs e)
> {
> wb.Document.ContextMenuShowing +=
> new HtmlElementEventHandler(
> Document_ContextMenuShowing);
> }
>
>
> void Document_ContextMenuShowing(object sender,
> HtmlElementEventArgs e)
> {
> e.ReturnValue = false;
> contextMenuStrip1.Show(Cursor.Position);
> }
Ja so (aehnlich) hatte ich das eigentlich bisher gelöst.
>> je nachdem, was im Browser ausgewählt ist [...]
>
> das ist mehrdeutig, aber man kann über das DOM alles über "ausgewählte"
> Elemente erfahren. Das aktive ist normal: wb.Document.ActiveElement
Funktioniert hier nicht.
Nur zur Erklaerung:
Wenn ein User von meinem Programm im Webbrowser-Control mit der Maus
einen beliebigen dargestellten Text oder Texteil augewählt hat, so
moechte ich erreichen das im ContextMenu ein neuer Eintrag "Auswahl-
Quelltext anzeigen" drin steht. (Wie bei Firefox z.B.)
> Ansonsten weiterführende Techniken:
>
> [Eigenes HTML im WebBrowser einfügen] http://dzaebel.net/MshtmlTab.htm
Damit kann ich nicht wirklich was anfangen, das geht ja in die
entgegengesetzte Richtung von meinem Anliegen.
Salut, Renè
> Nur zur Erklaerung:
>
> Wenn ein User von meinem Programm im Webbrowser-Control mit der Maus
> einen beliebigen dargestellten Text oder Texteil augewählt hat, so
> moechte ich erreichen das im ContextMenu ein neuer Eintrag "Auswahl-
> Quelltext anzeigen" drin steht. (Wie bei Firefox z.B.)
Vielleicht hilft Dir das hier irgendwie weiter - da hat jemand genau
das schonmal gelöst...:
http://www.bayden.com/ietoys/
-> "HTML Source"
Viele Grüße + Frohe Weihnachten
Harald M. Genauck
"VISUAL STUDIO one" - http://www.visualstudio1.de (Chefredakteur)
"ABOUT Visual Basic" - http://www.aboutvb.de (Hrsg. + Redaktion)
>>> je nachdem, was im Browser ausgewählt ist [...]
>> das ist mehrdeutig, aber man kann über das DOM alles über
>> "ausgewählte"
>> Elemente erfahren. Das aktive ist normal:
>> wb.Document.ActiveElement
> Funktioniert hier nicht. [...]
Funktioniert auch bei Dir, aber Du hast scheinbar: "Markierung"
und nicht "selektiertes Element" gemeint.
Hier ist im [Download2] aber auch eine Beispiel-Implementation
für "selektiertes HtmlElement":
[Eigenes Kontextmenü für aktives Element im WebBrowser]
http://dzaebel.net/WebBrowserContextMenu.htm