AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Webbrowser.OleObject mittels Vorfahren erreichen
Thema durchsuchen
Ansicht
Themen-Optionen

Webbrowser.OleObject mittels Vorfahren erreichen

Offene Frage von "oki"
Ein Thema von oki · begonnen am 14. Dez 2010 · letzter Beitrag vom 17. Jan 2011
 
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#3

AW: Webbrowser.OleObject mittels Vorfahren erreichen

  Alt 14. Dez 2010, 15:10
Da ich nur einmal kurz mit der TEmbeddedWb-Komponente gearbeitet hatte, bin ich dafür sicher kein Experte.

Ich habe allerdings das Beispiel aus Interesse einmal getestet: Und bei mir war schon nach Document Schluß. Also liefert OleObject schon keinen Zeiger auf Document. Da OleObject eine Variante als Ergebnis liefert, wird anschießend versucht, über _DispInvoke in der Unit Variants einen Zeiger auf Document zu erhalten. Das geschieht durch den Aufruf von VarDispInvoke in der Unit ComObj. Innerhalb dieser Prozedur wird mit GetIDsOfNames die DispatchID von Document innerhalb des Objektes OleObject ermittelt (203). Das funktioniert auch - deshalb wird im Anschluß DispatchInvoke aufgerufen. Hier treten die Probleme auf: Mein Delphi-Compiler (Delphi2010) interpretiert meinen Untersuchungen zufolge den Aufruf von Document aus den RTTI als Methode (DISPATCH_METHOD). Dabei hatte ich mein Formular mit dem Schalter {$METHODINFO ON} compiliert. Document ist aber eine Eigenschaft des übergeordneten Objektes (genauer gesagt: Es ist selbst wieder ein COM-Objekt). Und hier scheint der Fehler aufzutreten: Document wird aufgerufen, statt einen Zeiger auf dieses Objekt zu ermitteln. Dieser wäre nämlich notwendig, um sich zum nächsten Objekt (All) "durchzufragen".

Lange Rede, kurzer Sinn: So scheint das leider nicht zu funktionieren.

Da ich bei meinem aktuellen Projekt ebenfalls auf einige Bugs innerhalb der Ole-Umsetzung gestoßen bin, habe ich das anders gelöst:
Delphi-Quellcode:
procedure SetProperty(WebBrowser: TWebBrowser; NodeName, PropertyName: String; Value: OleVariant);
var
  All, Node: OleVariant;
begin
  //"All"-Objekt des Dokumentes ermitteln:
  All:=GetProp(WebBrowser.Document,'all');
  //HTML-Element aus dem "All"-Objekt ermitteln:
  Node:=GetProp(All,NodeName);
  //Eigenschaft des HTML-Elementes setzen:
  SetProp(Node,PropertyName,Value);
end;
Habe ich gerade getestet - funktioniert.
Die notwendigen Funktionen GetProp und SetProp habe ich aus der Unit BrowserTools im Downloadbereich der aktuellen Toolbox-Ausgabe. Dort die Source zum Beitrag Delphi und Google Maps.
Thomas Nitzschke
  Mit Zitat antworten Zitat
 


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 02:09 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