AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

OleVariant auf Null prüfen?

Ein Thema von Angel4585 · begonnen am 21. Mai 2008 · letzter Beitrag vom 29. Okt 2010
Antwort Antwort
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#1

AW: OleVariant auf Null prüfen?

  Alt 26. Okt 2010, 16:09
Also um zu Prüfen ob ein Variant = Null ist verwendet man die Funktion VarIsNull() aus der Unit Variants.

Du hast aber noch ein ganz anderes Problem.
Du greifst ohne Prüfung auf Document zu:
aNode := WebBrowser1.OleObject.Document.all.tags('table').Item(0); Wenn kein Document geladen ist, dann ist Document = nil und die Zugriffsverletzung vorprogrammiert!
Daher:
Delphi-Quellcode:
var
  document : OleVariant;
begin
  if not Assigned(WebBrowser1.Document) then
    raise Exception.Create('kein HTML-Dokument geladen');
  document := WebBrowser1.Document;
  aNode := document.all.tags('table').Item(0);
Dann gehts aber noch weiter.
Du greifst mit Gottvertrauen auf ein Element zu, dass mit 'table' getagged ist.
Und wenn es das nicht gibt? Dann macht's auch "Platsch".
Delphi-Quellcode:
function VarIsDispatchObject(const v : Variant): Boolean; // Hilfsfunktion
var
   vt : Integer;
begin
   vt := VarType(v) and not varByRef;
   Result := (vt = varDispatch);
end;
.....

var
  document, table : OleVariant;
begin
  if not Assigned(WebBrowser1.Document) then
    raise Exception.Create('kein HTML-Dokument geladen');
  document := WebBrowser1.Document;
  table := document.all.tags('table');
  if not VarIsDispatchObject(table) then
    raise Exception.Create('kein "table"-Element im Dokument enthalten');
  aNode := table.Item[0];
Andreas
  Mit Zitat antworten Zitat
PfWSkip

Registriert seit: 14. Okt 2009
Ort: Coruscant - Orange-Bezirk
6 Beiträge
 
Delphi 7 Professional
 
#2

AW: OleVariant auf Null prüfen?

  Alt 27. Okt 2010, 09:17
*kopfklatsch*
Erstmal danke für die Antwort und die Mühe
Stimmt natürlich, ich muss die Objekte erstmal abfragen, bevor ich weitermache. Ich beschäftige mich mit dem TWebBrowser und dem ganzen Krams auch erst seit gestern.
Allerdings liefert deine Funktion "VarIsDispatchObject" immer True zurück, egal ob 'table' jetzt existiert oder nicht. Somit kann ich alle weiteren Abfragen innerhalb von document wieder knicken.

Das assign auf webbrowser1.document funktioniert ist ja klar, ist ja auch kein olevariant

Das Problem (olevariant = nil ?!?) besteht also weiterhin
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

AW: OleVariant auf Null prüfen?

  Alt 27. Okt 2010, 13:14
Zitat von PfWSkip;1058059Allerdings liefert deine Funktion "VarIsDispatchObject" [B:
immer[/B] True zurück, egal ob 'table' jetzt existiert oder nicht
Das ist aber nicht schlimm.
Anscheinend wird hier eine leere Collection vom Typ IHTMLElementCollection zurückgeliefert.
Anstatt zu prüfen, ob ein Objekt (genauer gesagt ein Dispatch-Interfacezeiger) zurückkommt,
prüft man ob die Collection leer ist:
Delphi-Quellcode:
table := document.all.tags('table');
if table.length = 0 then
  raise Exception.Create('kein "table"-Element im Dokument enthalten');
aNode := table.Item[0];
Andreas
  Mit Zitat antworten Zitat
PfWSkip

Registriert seit: 14. Okt 2009
Ort: Coruscant - Orange-Bezirk
6 Beiträge
 
Delphi 7 Professional
 
#4

AW: OleVariant auf Null prüfen?

  Alt 29. Okt 2010, 07:42
super danke!

mit der prüfung auf .length = 0 funktioniert das super
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:41 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