AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi MounseOver mit TWebbrowser und Frames...
Thema durchsuchen
Ansicht
Themen-Optionen

MounseOver mit TWebbrowser und Frames...

Ein Thema von Mavarik · begonnen am 29. Mär 2006 · letzter Beitrag vom 3. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.130 Beiträge
 
Delphi 10.3 Rio
 
#1

MounseOver mit TWebbrowser und Frames...

  Alt 29. Mär 2006, 08:00
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:
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) = 'athen
  begin
    Statusbar1.Simpletext := Format('Link : %s',[element.getAttribute('href',0)]);
  end
  else if LowerCase(element.tagName) = 'imgthen
  begin
    Statusbar1.Simpletext := Format('Bild : %s',[element.getAttribute('src',0)]);
  end
  else
  begin
    Statusbar1.Simpletext := Format('TAG : %s',[element.tagName]);
  end;
end;
Wenn es sich dabei aber um eine Frameseite handelt, erhalte ich immer nur den Tag "Frame".

Ich kann Zwar mit:

htmlDoc.parentWindow.frames.length und
htmlDoc.parentWindow.frames.item(x).Name; auf den Namen zugreifen, aber wie erhalte ich vom Unterframe die Mausover events und Elemente?


Frank
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: MounseOver mit TWebbrowser und Frames...

  Alt 29. Mär 2006, 08:11
Hallo

Musstest du dann nicht fuer jedes Frame-Dokument ein onmouseover Ereignis setzen?
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.130 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: MounseOver mit TWebbrowser und Frames...

  Alt 29. Mär 2006, 08:20
Zitat von toms:
Hallo

Musstest du dann nicht fuer jedes Frame-Dokument ein onmouseover Ereignis setzen?
Nehme ich an, aber wie?

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
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#4

Re: MounseOver mit TWebbrowser und Frames...

  Alt 29. Mär 2006, 08:31
Zitat von Mavarik:
[
Um einen MouseOver event zu setzen müsste es schon ein IHTMLDocument2 typ sein!

Ideen?
Schau mal hier.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.130 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: MounseOver mit TWebbrowser und Frames...

  Alt 29. Mär 2006, 09:34
OK Danke könnte der richtige Weg zu sein, leider erhalte ich dann eine AV.

Habe es wie folgt gelösst:

Delphi-Quellcode:
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;
Leider dann eine AV bei

  element := htmlDoc.parentWindow.event.srcElement; Frank
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: MounseOver mit TWebbrowser und Frames...

  Alt 29. Mär 2006, 10:30
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:
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;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.130 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: MounseOver mit TWebbrowser und Frames...

  Alt 29. Mär 2006, 13:06
Zitat von marabu:
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:
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;
Grüße vom marabu
Leider funktioniert das nicht.. Succeeded ist immer false! Warum auch immer...

Frank
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: MounseOver mit TWebbrowser und Frames...

  Alt 29. Mär 2006, 13:26
Vielleicht besser so:

Delphi-Quellcode:
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;
marabu
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.130 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: MounseOver mit TWebbrowser und Frames...

  Alt 29. Mär 2006, 13:41
Das war es leider auch nicht!

Hier gibt es eine AV mit "EIntfCastError" Interface nicht unterstützt!

bei
with wb2 as IHTMLDocument2 do Frank
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#10

Re: MounseOver mit TWebbrowser und Frames...

  Alt 29. Mär 2006, 14:18
hallo,

Probiere's mal so:

Delphi-Quellcode:
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;
Nachtrag: Funktioniert so, aber falls mehrere Frames vorhanden sind, gibt's eine AV bei

element := htmlDoc.parentWindow.event.srcElement; da event = nil ist...
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz