Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi TWebBrowser, IHTMLDocument2.onkeyup in Delphi ausführen? (https://www.delphipraxis.net/179213-twebbrowser-ihtmldocument2-onkeyup-delphi-ausfuehren.html)

Codehunter 20. Feb 2014 15:22

TWebBrowser, IHTMLDocument2.onkeyup in Delphi ausführen?
 
Hallo!

Ich hab den Gockel schon durchs Netz gescheucht aber einfach nichts dazu gefunden: Gibt es eine Möglichkeit, das JavaScript-DOM-Event document.onkeyup delphiseitig auszuführen?

Um genauer zu sein: Ich habe ein TWebBrowser und darin ein HTML-Document. Den Webbrowser versetze ich in den Editmode. Nun kann der User den Inhalt von document.body.innerHTML beliebig ändern. Ich bräuchte nun nur eine Möglichkeit, delphiseitig auf das Ereignis KeyUp zu reagieren. Bildlich gesprochen: Der User drückt innerhalb des TWebbrowser (im Editmode) eine Taste und mein Delphi-Programm reagiert auf das DOM-Event.

Es gibt ja im IHTMLDocument2 ein Member namens "onkeyup" welches als OleVariant deklariert ist. Kann man da eine Delphi-Prozedur andocken?

Grüße
Cody

himitsu 20. Feb 2014 15:34

AW: TWebBrowser, IHTMLDocument2.onkeyup in Delphi ausführen?
 
Zitat:

Es gibt ja im IHTMLDocument2 ein Member namens "onkeyup" welches als OleVariant deklariert ist. Kann man da eine Delphi-Prozedur andocken?
Ja?

http://msdn.microsoft.com/en-us/library/aa752618.aspx

Codehunter 20. Feb 2014 15:43

AW: TWebBrowser, IHTMLDocument2.onkeyup in Delphi ausführen?
 
Ähm ja, gehen wir der Einfachheit halber mal davon aus dass ich die betreffenden MSDN-Seiten wohl kenne aber was Delphi betrifft gerade unter niedrigem Koffeinspiegel leide... ;-)

himitsu 20. Feb 2014 15:57

AW: TWebBrowser, IHTMLDocument2.onkeyup in Delphi ausführen?
 
Wobei ja alles irgendwo schon dasteht:

IDispatch

dispid 0 <<< das erwähnte Default-Event

Delphi-Quellcode:
void HandleEvent(IHTMLEventObj pEvtObj)
<<< die vermutliche Event-Signatur


vermutlich so zusammengesetzt?
Delphi-Quellcode:
  IXyz = interface(IDispatch)
    ['{...}']
    procedure HandleEvent(EvtObj: IHTMLEventObj); dispid 0; // stdcall? :grübel:
 
// oder

  IXyz = dispinterface
    ['{...}']
    procedure HandleEvent(EvtObj: IHTMLEventObj); dispid 0;
Zuweisung:
Delphi-Quellcode:
webbrowser.onkeydown := deineventinterface;

// oder

webbrowser.attachEvent('onkeydown', deineventinterface);


[add]
Ach ja ... google ... http://www.delphimaster.net/view/6-1138639504/all

Ich hoff' russisch ist leichter als englisch. :angel2:

Codehunter 24. Feb 2014 14:10

AW: TWebBrowser, IHTMLDocument2.onkeyup in Delphi ausführen?
 
Zitat:

Zitat von himitsu (Beitrag 1248813)
Ach ja ... google ... http://www.delphimaster.net/view/6-1138639504/all

Ich hoff' russisch ist leichter als englisch. :angel2:

Das funktioniert sogar. In meinem Fall habe ich das mit Document.onkeypress gemacht. Nur habe ich ein kleines Problem: Übernehme ich das Beispiel genau so, dann gibts beim Programmende ein Memleak weil das THtmlEvent "EventHandler" nie freigegeben wird. Soweit ja klar. Nur gebe ich das Objekt frei, dann fliegen mir die AVs nur so um die Ohren. Ich vermute mal, ich muss vorher noch die bestehenden Beziehungen zwischen dem IHTMLDocument2 und dem THtmlEvent auflösen. Wenn ich aber Document.onkeypress vor dem Freigeben des "EventHandler" NULL zuweise, kriege ich auch nur eine AV.


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

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