Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wert von OleVariant überprüfen? (https://www.delphipraxis.net/32459-wert-von-olevariant-ueberpruefen.html)

Raul3D 23. Okt 2004 16:04


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!

omata 23. Okt 2004 19:09

Re: Wert von OleVariant überprüfen?
 
Moin,

das geht so...

Delphi-Quellcode:
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;
MfG
Thorsten

Raul3D 24. Okt 2004 13:30

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.

Raul3D 24. Okt 2004 14:04

Re: Wert von OleVariant überprüfen?
 
Ups, so funktioniert es doch. Hab gerade einen anderen Fehler entdeckt. Thanks!

BorlanDelphiUser 25. Feb 2005 15:15

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:
myString := Form1.WebBrowser.OleObject.document.getElementById('count').innerHTML;
hab das ganze schon so probiert, funktioniert aber nicht es kommt trotzdem der Fehler.

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;

shmia 25. Feb 2005 15:34

Re: Wert von OleVariant überprüfen?
 
Wenn du überprüfen willst, ob in einem OleVariant ein (Automatisierungs)-Objekt steckt, dann:
Delphi-Quellcode:
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 :-(');
Dann packst du dir das in ein Funktion, dann hast du es immer parat:
Delphi-Quellcode:
function VariantIsObject(const value:OleVariant):boolean;
begin
   result := (VarType(value) = varDispatch);
end;

BorlanDelphiUser 25. Feb 2005 15:46

Re: Wert von OleVariant überprüfen?
 
@shmia

und was ist - FormItem - ?

shmia 25. Feb 2005 15:56

Re: Wert von OleVariant überprüfen?
 
Zitat:

Zitat von BorlanDelphiUser
@shmia
und was ist - FormItem - ?

Ein Kopierfehler; sollte eigentlich x heisen. (das ist einfach die OleVariant, die getestet werden soll)

BorlanDelphiUser 25. Feb 2005 16:16

Re: Wert von OleVariant überprüfen?
 
hmm ... also ich hab das ganze jetzt so gemacht.

Delphi-Quellcode:
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;
und wenn ich jetzt auf den Button klicke kommt immer noch eine Fehlermeldung und keine Messagebox mit dem Hinweis nix geladen :-(

Mach ich da irgendwas verkehrt oder ist da irgendwas im Code falsch?

shmia 25. Feb 2005 16:41

Re: Wert von OleVariant überprüfen?
 
Zitat:

Zitat von BorlanDelphiUser
und wenn ich jetzt auf den Button klicke kommt immer noch eine Fehlermeldung und keine Messagebox mit dem Hinweis nix geladen :-(
Mach ich da irgendwas verkehrt oder ist da irgendwas im Code falsch?

Du musst schon vorher nachschauen, ob in der Variablen document was drin ist:
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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:31 Uhr.
Seite 1 von 2  1 2      

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