Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi WebBrowser1.OleObject.document.forms.item(0).eleme nts.item(' (https://www.delphipraxis.net/99645-webbrowser1-oleobject-document-forms-item-0-elements-item.html)

taktaky 15. Sep 2007 10:03


WebBrowser1.OleObject.document.forms.item(0).eleme nts.item('
 
Hallo,

ich möchte, bevor ich ein Feld ausfülle, zuerst überprüfen, ob das Feld überhaubt in Webbrowser existiert, damit ich keine Fehlermeldung erhalte.

Delphi-Quellcode:
if ??? then
WebBrowser1.OleObject.document.forms.item(0).elements.item('vorname').value:=Edit4.Text;
else
exit;
//Showmessage('blabla');
Was muss ich im Bereich ??? schreiben?

Oder einfach so :
Delphi-Quellcode:
if fileexists(WebBrowser1.OleObject.document.forms.item(0).elements.item('vorname').value)
:gruebel:

marabu 15. Sep 2007 10:22

Re: WebBrowser1.OleObject.document.forms.item(0).eleme nts.it
 
Hallo,

ein nicht existierendes item ist null.

Bitte trage deine Delphi-Version in deinem DP-User-Profil ein.

OffTopic: Dein Deutsch wird immer besser, aber mit den Emoticons musst du etwas aufpassen: Weniger ist manchmal mehr.

Freundliche Grüße

taktaky 15. Sep 2007 10:47

Re: WebBrowser1.OleObject.document.forms.item(0).eleme nts.it
 
Zitat:

Zitat von marabu
ein nicht existierendes item ist null.

So habe ich ausprobiert:
Delphi-Quellcode:
if WebBrowser1.OleObject.document.forms.item(0).elements.item('vorname').value <> Null then
begin
WebBrowser1.OleObject.document.forms.item(0).elements.item('vorname').value :='x';
WebBrowser1.OleObject.document.forms.item(0).elements.item('nachname').value :='y';
end
else
exit;
end;
Leider hat es nicht geklappt !

marabu 15. Sep 2007 10:59

Re: WebBrowser1.OleObject.document.forms.item(0).eleme nts.it
 
Wenn du auf item.value zugreifst, dann musst du zuerst prüfen, ob item nicht null ist. Du prüfst value und ich hatte item geschrieben.

DGL-luke 15. Sep 2007 11:00

Re: WebBrowser1.OleObject.document.forms.item(0).eleme nts.it
 
Eher so:

Delphi-Quellcode:
if WebBrowser1.OleObject.document.forms.item(0).elements.item('vorname') <> Null then
Allerdings solltest du aufpassen, dass du auch auf das richtige "Null" prüfst, das sollte eine entsprechend vordefinierte Konstante sein (Entweder vom Variant generell, oder eine, die nur für den Webbrowser gilt).

taktaky 15. Sep 2007 11:14

Re: WebBrowser1.OleObject.document.forms.item(0).eleme nts.it
 
Zitat:

Zitat von DGL-luke
Eher so:

Delphi-Quellcode:
if WebBrowser1.OleObject.document.forms.item(0).elements.item('vorname') <> Null then
Allerdings solltest du aufpassen, dass du auch auf das richtige "Null" prüfst, das sollte eine entsprechend vordefinierte Konstante sein (Entweder vom Variant generell, oder eine, die nur für den Webbrowser gilt).

Ich bekomme eine Fehlermeldung : Invalid variant Operation !!!

Alle Felder befinden sich im Webbrowser1 und nicht in Web. Aber wenn das Formular geschickt wird, wird eine Seite von der Webseite angezeigt (Als Bestätigung :Formular wurde geschickt).

Wenn aber der User wieder auf das Button anklickt, dann erscheint natürlich die Fehlermeldung, da kein Formular in Webbrowser gibt. Und dies möchte ich unbedingt vermeiden.

marabu 15. Sep 2007 12:04

Re: WebBrowser1.OleObject.document.forms.item(0).eleme nts.it
 
Unter diesen Umständen musst du natürlich bereits forms.item(0) auf null prüfen, da sonst der Zugriff auf item(0).elements zu dem beobachteten Zugriffsfehler führt.

taktaky 15. Sep 2007 12:19

Re: WebBrowser1.OleObject.document.forms.item(0).eleme nts.it
 
Zitat:

Zitat von marabu
Unter diesen Umständen musst du natürlich bereits forms.item(0) auf null prüfen, da sonst der Zugriff auf item(0).elements zu dem beobachteten Zugriffsfehler führt.

Und wie?

So habe ich versucht:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
if (WebBrowser1.OleObject.document.forms.item(0)<> Null) and
(WebBrowser1.OleObject.document.forms.item(0).elements.item('vorname') <> Null)
then
begin
WebBrowser1.OleObject.document.forms.item(0).elements.item('vorname').value:='x';
WebBrowser1.OleObject.document.forms.item(0).elements.item('nachname').value:='y';

end
else
exit;
end;


Ich bekomme immer die Fehlermeldung : Invalid variant Operation !!!




--

marabu 15. Sep 2007 12:51

Re: WebBrowser1.OleObject.document.forms.item(0).eleme nts.it
 
Den Test musst du mit der Funktion VarIsClear() durchführen.

taktaky 15. Sep 2007 13:55

Re: WebBrowser1.OleObject.document.forms.item(0).eleme nts.it
 
Zitat:

Zitat von marabu
Den Test musst du mit der Funktion VarIsClear() durchführen.

Ich habe leider kein Beispiel über VarIsClear() in Forum gefunden.

Ich habe Eine andere Lösung (aber nicht ganz gut aber funktioniert):
Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);
begin
WebBrowser1.OleObject.Document.Forms.item(0).submit;
Button1.Enabled:= false;
Button5.Enabled:= false;
Ich habe das Button "senden" in Webbrowser gelöscht und auf Form erstellen
Das Button "Senden" sendet das Formular und deaktiviert auch einige Buttons und sich selbst


Mit VarIsClear() wäre es vielleicht besser

gruß

Andreas L. 15. Sep 2007 14:05

Re: WebBrowser1.OleObject.document.forms.item(0).eleme nts.it
 
Ein Blick in die Delphi-Hilfe verrät dir, dass die Funktion so angewendet werden kann:

Delphi-Quellcode:

   if VarIsClear(webbrowser1.......) then
    begin
     tuwas;
    end;

taktaky 15. Sep 2007 14:36

Re: WebBrowser1.OleObject.document.forms.item(0).eleme nts.it
 
Zitat:

Zitat von Andreas L.
Ein Blick in die Delphi-Hilfe verrät dir, dass die Funktion so angewendet werden kann:

Delphi-Quellcode:

   if VarIsClear(webbrowser1.......) then
    begin
     tuwas;
    end;

So habe ich den Code geschrieben:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
if VarIsClear(WebBrowser1.OleObject.document.forms.item(0)) <> Null then
begin
blabla
blabla
end
else
exit;
end;
Man kann das Formular zwar ausfüllen und senden aber wenn das Formular nicht mehr vorhanden ist und klicke ich auf das Button, dann erscheint eine Fehlermeldung

Andreas L. 15. Sep 2007 15:03

Re: WebBrowser1.OleObject.document.forms.item(0).eleme nts.it
 
Zitat:

Zitat von taktaky
Zitat:

Zitat von Andreas L.
Ein Blick in die Delphi-Hilfe verrät dir, dass die Funktion so angewendet werden kann:

Delphi-Quellcode:

   if VarIsClear(webbrowser1.......) then
    begin
     tuwas;
    end;

So habe ich den Code geschrieben:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
if VarIsClear(WebBrowser1.OleObject.document.forms.item(0)) <> Null then
begin
blabla
blabla
end
else
exit;
end;
Man kann das Formular zwar ausfüllen und senden aber wenn das Formular nicht mehr vorhanden ist und klicke ich auf das Button, dann erscheint eine Fehlermeldung

Du brauchst nicht mehr auf <> Null prüfen. Das macht alles die Funtion varIsClear. Einfache if varisclear(...) then wie ich es weiter oben bereits gepostet habe. Markiere in Delphi den Befel VarIsClear und drücke F1...

taktaky 15. Sep 2007 17:38

Re: WebBrowser1.OleObject.document.forms.item(0).eleme nts.it
 
Wenn ich so mache:
Delphi-Quellcode:
if VarIsClear(WebBrowser1.OleObject.document.forms.item(0))
dann passiert nichts, wenn ich auf das Button zum Ausfüllen klicke !

marabu 15. Sep 2007 17:51

Re: WebBrowser1.OleObject.document.forms.item(0).eleme nts.it
 
C'est tres mysterieuse.

Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
var
  form, element: OleVariant;
begin
  form := WebBrowser.OleObject.Document.forms.item('f');
  if not VarIsClear(form) then
  begin
    element := form.elements.item('q');
    if not VarIsClear(element) then
      element.value := 'taktaky';
  end;
end;
Wenn ich auf http://www.google.de navigiere und den Button drücke, dann wird das Suchfeld gefüllt, auf anderen Seiten wird ein Fehler vermieden. Das waren deine beiden Anforderungen - n'est-ce pas?

Salut

taktaky 16. Sep 2007 09:46

Re: WebBrowser1.OleObject.document.forms.item(0).eleme nts.it
 
Mit dem Code erscheint zwar keine Fehlermeldung, passiert aber nichts!
Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
var
  form, element: OleVariant;
begin
  form := WebBrowser1.OleObject.Document.forms.item('vorname');
  if not VarIsClear(form) then
  begin
    element := form.elements.item('vorname');
    if not VarIsClear(element) then
      element.value := 'taktaky';
  end;
end;
Das Feld im WebBrowser1 mit dem Namen "vorname" bleibt leer


--------------

Die Muhkuh 16. Sep 2007 09:47

Re: WebBrowser1.OleObject.document.forms.item(0).eleme nts.it
 
Was sagt der Debugger? Per F7 mal durchsteppen und die Werte ansehen...

marabu 16. Sep 2007 10:01

Re: WebBrowser1.OleObject.document.forms.item(0).eleme nts.it
 
Hallo taktaky,

du hast einen kleinen Fehler beim Anpassen meines Codes gemacht: forms.item('f') bezeichnet das Formular mit dem Namen 'f' auf der Google-Einstiegsseite und du hast einfach den Namen deines Feldes eingetragen. Wenn dein Formular keinen Namen hat, dann kannst du es über seinen Index ansprechen - forms.item(0) addressiert das erste Formular auf der Seite.

Freundliche Grüße

taktaky 16. Sep 2007 10:25

Re: WebBrowser1.OleObject.document.forms.item(0).eleme nts.it
 
Zitat:

Zitat von marabu
Hallo taktaky,

du hast einen kleinen Fehler beim Anpassen meines Codes gemacht: forms.item('f') bezeichnet das Formular mit dem Namen 'f' auf der Google-Einstiegsseite und du hast einfach den Namen deines Feldes eingetragen. Wenn dein Formular keinen Namen hat, dann kannst du es über seinen Index ansprechen - forms.item(0) addressiert das erste Formular auf der Seite.

Freundliche Grüße

Das stimmt. Nun funktioniert alles in Ordnung ohne Fehlermeldung, wenn kein Formular in WebBrowser gibt :thumb:

Viele Grüße
Delphi-Quellcode:
 _      _   _   _____   _       _____   __   _ 
| |   / / | | | ____| | |     | ____| |  \ | | 
| |  / /  | | | |__   | |     | |__   |   \| | 
| | / /   | | |  __|  | |     |  __|  | |\   | 
| |/ /    | | | |___  | |___  | |___  | | \  | 
|___/     |_| |_____| |_____| |_____| |_|  \_| 
 _____        ___   __   _   _   _   
|  _  \     /   | |  \ | | | | / / 
| | | |    / /| | |   \| | | |/ /   
| | | |   / / | | | |\   | | |\ \   
| |_| |  / /  | | | | \  | | | \ \ 
|_____/ /_/   |_| |_|  \_| |_|  \_\


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:52 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