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.