![]() |
Wert von OleVariant überprüfen?
Hi,
ich will überprüfen, ob ein bestimmtes Element im TWebBrowser bereits geladen ist. Dazu benutze ich Browser.OleDocument.All.Item('name') um das Object zu bekommen. Allerdings bekomme ich mit dieser Funktion immer ein Element zurück, auch wenn es noch nicht geladen wude. Laut Delphi-Debugger ist der Wert dann zwar $00000000, aber da man OleVariants ja nicht mit "=" vergleichen kann, nützt das nicht viel. Wie kann ich gucken ob wirklich ein Element zurückgegeben wurde (also z.B. $004132A5)? Ich habe es schon mit VarIsNull() probiert, das liefert aber immer False, auch wenn die OleVariant den Wert $00000000 hat. Danke! |
Re: Wert von OleVariant überprüfen?
Moin,
das geht so...
Delphi-Quellcode:
MfG
procedure TForm.ButtonClick(Sender: TObject);
var x, Document:Variant; begin Document:=WebBrowser.Document; x:=Document.All.Item('name'); if Assigned(TVarData(x).VPointer) then x.Value := 'jetzt kann ich drauf zugreifen'; end; Thorsten |
Re: Wert von OleVariant überprüfen?
Das liefert leider immer True zurück, auch wenn das Objekt nicht gefunden wurde und $00000000 zurückgeliefert wurde.
|
Re: Wert von OleVariant überprüfen?
Ups, so funktioniert es doch. Hab gerade einen anderen Fehler entdeckt. Thanks!
|
Re: Wert von OleVariant überprüfen?
Hallo,
ich hab gerade das gleich Problem wie Raul3D. Ich greife aber per ID auf das Element zu.
Delphi-Quellcode:
hab das ganze schon so probiert, funktioniert aber nicht es kommt trotzdem der Fehler.
myString := Form1.WebBrowser.OleObject.document.getElementById('count').innerHTML;
Delphi-Quellcode:
procedure TForm.ButtonClick(Sender: TObject);
var x, Document:Variant; begin Document:=WebBrowser.Document; x:=Document.getElementById('count'); if Assigned(TVarData(x).VPointer) then x.innerHTML := 'jetzt kann ich drauf zugreifen'; end; |
Re: Wert von OleVariant überprüfen?
Wenn du überprüfen willst, ob in einem OleVariant ein (Automatisierungs)-Objekt steckt, dann:
Delphi-Quellcode:
Dann packst du dir das in ein Funktion, dann hast du es immer parat:
var
x, Document : OleVariant; // nicht Variant begin Document:=WebBrowser.Document; x:=Document.getElementById('count'); if VarType(FormItem) = varDispatch then // <-===== ShowMessage(x.innerHTML) else ShowMessage('nix geladen :-(');
Delphi-Quellcode:
function VariantIsObject(const value:OleVariant):boolean;
begin result := (VarType(value) = varDispatch); end; |
Re: Wert von OleVariant überprüfen?
@shmia
und was ist - FormItem - ? |
Re: Wert von OleVariant überprüfen?
Zitat:
|
Re: Wert von OleVariant überprüfen?
hmm ... also ich hab das ganze jetzt so gemacht.
Delphi-Quellcode:
und wenn ich jetzt auf den Button klicke kommt immer noch eine Fehlermeldung und keine Messagebox mit dem Hinweis nix geladen :-(
procedure TForm1.Button3Click(Sender: TObject);
var x, Document : OleVariant; // nicht Variant begin Document:=WebBrowser.Document; x:=Document.getElementById('countdown'); if VarType(x) = varDispatch then // <-===== ShowMessage(x.innerHTML) else ShowMessage('nix geladen :-('); end; Mach ich da irgendwas verkehrt oder ist da irgendwas im Code falsch? |
Re: Wert von OleVariant überprüfen?
Zitat:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var x, Document : OleVariant; // nicht Variant begin Document:=WebBrowser.Document; if not VariantIsObject(Document) then raise Exception.Create('kein Dokument geladen'); x:=Document.getElementById('countdown'); if VariantIsObject(x) then ShowMessage(x.innerHTML) else ShowMessage('countdown nicht gefunden :-('); end; |
Re: Wert von OleVariant überprüfen?
@shmia ... also ich weis nicht mehr weiter es kommt immernoch die Exception. hast du das ganze mal selber getestet? Wär schon wenn du mal ein funktionierendes Beispiel zum download hier Anhängen könntest.
|
Re: Wert von OleVariant überprüfen?
Ich wuerd's etwa so machen:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var x, Document : OleVariant; // nicht Variant Doc : IHTMLDocument2; begin Assert(Assigned(WebBrowser.Document)); if WebBrowser.Document.QueryInterface(IHTMLDocument2, Doc) = S_OK then begin x:= Doc.getElementById('countdown'); if Assigned(x) then ShowMessage(x.innerHTML) else ShowMessage('countdown nicht gefunden :-('); end; end; |
Re: Wert von OleVariant überprüfen?
@toms
da gibts auch schon wieder Probleme :wall: Zitat:
|
Re: Wert von OleVariant überprüfen?
schreib's so:
Delphi-Quellcode:
Doc : IHTMLDocument3;
Delphi-Quellcode:
evtl. durch
if Assigned(x) then
Delphi-Quellcode:
ersetzen od. mit QueryInterface(..)
if x <> nil then
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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 by Thomas Breitkreuz