![]() |
MounseOver mit TWebbrowser und Frames...
Hallo Zusammen!
Ich habe das Problem, dass ich in einem FrameSet das Element unter der Maus finden möchte... Ohne Frames geht es bekanntlich so:
Delphi-Quellcode:
Wenn es sich dabei aber um eine Frameseite handelt, erhalte ich immer nur den Tag "Frame".
procedure TMainform.WebBrowser1DownloadComplete(Sender: TObject);
begin if Assigned(WebBrowser1.Document) then begin htmlDoc := WebBrowser1.Document as IHTMLDocument2; htmlDoc.onmouseover := (TEventObject.Create(Document_OnMouseOver) as IDispatch); end; end; procedure TMainForm.Document_OnMouseOver; var element : IHTMLElement; begin if htmlDoc = nil then Exit; element := htmlDoc.parentWindow.event.srcElement; if LowerCase(element.tagName) = 'a' then begin Statusbar1.Simpletext := Format('Link : %s',[element.getAttribute('href',0)]); end else if LowerCase(element.tagName) = 'img' then begin Statusbar1.Simpletext := Format('Bild : %s',[element.getAttribute('src',0)]); end else begin Statusbar1.Simpletext := Format('TAG : %s',[element.tagName]); end; end; Ich kann Zwar mit:
Delphi-Quellcode:
und
htmlDoc.parentWindow.frames.length
Delphi-Quellcode:
auf den Namen zugreifen, aber wie erhalte ich vom Unterframe die Mausover events und Elemente?
htmlDoc.parentWindow.frames.item(x).Name;
Frank :coder: |
Re: MounseOver mit TWebbrowser und Frames...
Hallo
Musstest du dann nicht fuer jedes Frame-Dokument ein onmouseover Ereignis setzen? |
Re: MounseOver mit TWebbrowser und Frames...
Zitat:
Das htmldoc.patentWindows.frames ist zwar noch ein IHTMLFramesCollection2 Object, aber dann läuft es für mich ins "schwarze", den htmldoc.patentWindows.frames.item(0) ist "nur" noch ein OLEVariant... Um einen MouseOver event zu setzen müsste es schon ein IHTMLDocument2 typ sein! Ideen? Frank :coder: |
Re: MounseOver mit TWebbrowser und Frames...
Zitat:
![]() |
Re: MounseOver mit TWebbrowser und Frames...
OK Danke könnte der richtige Weg zu sein, leider erhalte ich dann eine AV.
Habe es wie folgt gelösst:
Delphi-Quellcode:
Leider dann eine AV bei
procedure TMainform.WebBrowser1DownloadComplete(Sender: TObject);
var W : IHTMLWindow2; u : IUnknown; S : String; begin if Assigned(WebBrowser1.Document) then begin htmlDoc := WebBrowser1.Document as IHTMLDocument2; if htmldoc.parentWindow.frames.length > 0 then begin u := htmldoc.frames.item(0); if Succeeded(u.QueryInterface(IHTMLWindow2,w)) then begin S := w.name; // Stimmt Caption := S; htmlDoc := W.document as IHTMLDocument2; end else begin htmlDoc := NIL; end; end; htmlDoc.onmouseover := (TEventObject.Create(Document_OnMouseOver) as IDispatch); end; end;
Delphi-Quellcode:
Frank :coder:
element := htmlDoc.parentWindow.event.srcElement;
|
Re: MounseOver mit TWebbrowser und Frames...
Hallo Frank,
ich würde das Ereignis OnDocumentComplete() von TWebBrowser verwenden - es wird für jeden Frame gefeuert und du brauchst einfach nur dein EventObj anhängen.
Delphi-Quellcode:
Grüße vom marabu
procedure TWebForm.WebBrowserDocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant); var doc: IHTMLDocument2; begin if Succeeded(pDisp.QueryInterface(IID_IHTMLDocument2, doc)) then doc.onmousemove := TEventObject.Create(Document_OnMouseOver) as IDispatch; end; |
Re: MounseOver mit TWebbrowser und Frames...
Zitat:
Frank :coder: |
Re: MounseOver mit TWebbrowser und Frames...
Vielleicht besser so:
Delphi-Quellcode:
marabu
procedure TWebForm.WebBrowserDocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant); var wb2: IWebBrowser2; begin if Succeeded(pDisp.QueryInterface(IID_IWebBrowser2, wb2)) then with wb2 as IHTMLDocument2 do onMouseMove := TEventObject.Create(Document_OnMouseOver) as IDispatch; end; |
Re: MounseOver mit TWebbrowser und Frames...
Das war es leider auch nicht!
Hier gibt es eine AV mit "EIntfCastError" Interface nicht unterstützt! bei
Delphi-Quellcode:
Frank :coder:
with wb2 as IHTMLDocument2 do
|
Re: MounseOver mit TWebbrowser und Frames...
hallo,
Probiere's mal so:
Delphi-Quellcode:
Nachtrag: Funktioniert so, aber falls mehrere Frames vorhanden sind, gibt's eine AV bei
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant); var wb2: IWebBrowser2; begin if Succeeded(pDisp.QueryInterface(IID_IWebBrowser2, wb2)) then begin htmlDoc := wb2.document as iHTMLDocument2; with htmlDoc do onMouseMove := TEventObject.Create(Document_OnMouseOver) as IDispatch; end; end;
Delphi-Quellcode:
da event = nil ist...
element := htmlDoc.parentWindow.event.srcElement;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 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