AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Webbrowser (Tembbeded) - Unültige Variantenoperation
Thema durchsuchen
Ansicht
Themen-Optionen

Webbrowser (Tembbeded) - Unültige Variantenoperation

Ein Thema von gee21 · begonnen am 21. Mär 2013 · letzter Beitrag vom 21. Mär 2013
Antwort Antwort
Seite 1 von 2  1 2      
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#1

Webbrowser (Tembbeded) - Unültige Variantenoperation

  Alt 21. Mär 2013, 13:26
Hi alle zusammen.

Ich versuche mit dem Webbrowser gerade ein paar Felder auszufüllen und Buttons zu drücken. Eigentlich klappt auch alles schon ganz gut aber bei einem Feld erscheint mir immer die Meldung: "Ungültige Variantenoperation"

Dieser Code nutze im um die Felder zu füllen:

Delphi-Quellcode:
function FillForm(WebBrowser1: tembeddedwb; FieldName: string; Value: string): Boolean;
var
  i, j: Integer;
  FormItem: Variant;
begin
  Result := False;
  //no form on document
  if WebBrowser1.OleObject.Document.all.tags('FORM').Length = 0 then
  begin
    Exit;
  end;
  //count forms on document
  for I := 0 to WebBrowser1.OleObject.Document.forms.Length - 1 do
  begin
    FormItem := WebBrowser1.OleObject.Document.forms.Item(I);
    for j := 0 to FormItem.Length - 1 do
    begin
      try
        //when the fieldname is found, try to fill out
        if FormItem.Item(j).Name = FieldName then
        begin
          FormItem.Item(j).Value := Value;
          Result := True;
        end;
      except
        Exit;
      end;
    end;
  end;
end;
So rufe ich diesen dann auf:
Delphi-Quellcode:
 
 repeat;
 Application.ProcessMessages;
 Sleep(0);
 until WebBrowser1.ReadyState=4;

  if FillForm(form1.WebBrowser1, 'quantity', edit7.text) = False then
    ShowMessage('Error. Field QUANTITY not available or no Form found.');
In Edit7 steht übrigens zum testen: 999




Der HTML Code der Seite (von diesem Feld das ich versuche auszufüllen) ist folgender:
Code:
   </tr>
            <tr>
              <td>Menge:</td>
              <td><input type="text" name="quantity" value="5" size="2" /></td>
            </tr>
            <tr>

Weiss jemand warum das so ist?
Robert
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Webbrowser (Tembbeded) - Unültige Variantenoperation

  Alt 21. Mär 2013, 14:19
Delphi-Strings ("AnsiStrings") und Ole-Variants sind nicht so ganz kompatibel zueinander.
Man kann im Datentyp Variant einen AnsiString speichern
Der VarTyp ist dann varString ; allerdings ist ausserhalb von Delphi nur varOleStr zulässig.
Ursache der Probleme ist, dass oftmals der Datentyp Variant verwendet wird wo eigentlich OleVariant notwendig wäre.


Wenn du die Deklaration von Value so ändert, dürfte dieses Problem nicht mehr auftreten können.
function FillForm(webbrowser: TEmbeddedwb; const FieldName: string; Value: OleVaiant): Boolean;
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Webbrowser (Tembbeded) - Unültige Variantenoperation

  Alt 21. Mär 2013, 14:33
Delphi-Strings ("AnsiStrings") und Ole-Variants sind nicht so ganz kompatibel zueinander.
Man kann im Datentyp Variant einen AnsiString speichern
Der VarTyp ist dann varString ; allerdings ist ausserhalb von Delphi nur varOleStr zulässig.
Ursache der Probleme ist, dass oftmals der Datentyp Variant verwendet wird wo eigentlich OleVariant notwendig wäre.


Wenn du die Deklaration von Value so ändert, dürfte dieses Problem nicht mehr auftreten können.
function FillForm(webbrowser: TEmbeddedwb; const FieldName: string; Value: OleVariant): Boolean;
HI Danke für die Info.
Leider habe ich aber immer noch die selbe Meldung. (Ungültige Variantenoperation)
Robert

Geändert von gee21 (21. Mär 2013 um 16:47 Uhr)
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#4

AW: Webbrowser (Tembbeded) - Unültige Variantenoperation

  Alt 21. Mär 2013, 17:41
Grüezi gee21,

ich kann mich täuschen, aber ich meine, dass statt
FormItem := WebBrowser1.OleObject.Document.forms.Item(I);
FormItem := WebBrowser1.OleObject.Document.forms.Item(I).elements;
stehen müsste.

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Webbrowser (Tembbeded) - Unültige Variantenoperation

  Alt 21. Mär 2013, 17:46
Grüezi gee21,

ich kann mich täuschen, aber ich meine, dass statt
FormItem := WebBrowser1.OleObject.Document.forms.Item(I);
FormItem := WebBrowser1.OleObject.Document.forms.Item(I).elements;
stehen müsste.

Gruß

Hi Volker

Das kann natürlich sein das deine Variante korrekter wäre. Aber es macht leider auch keinen unterschied.

Gruess Zurück
Robert
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#6

AW: Webbrowser (Tembbeded) - Unültige Variantenoperation

  Alt 21. Mär 2013, 17:59
Hier kommt etwas Code, mit dem du alle Form-Objekte im Browser in einem TreeView anzeigen kannst.
Das ist recht hilfreich bei der Fehlersuche und um die API des Webbrowsers besser zu verstehen:
Delphi-Quellcode:
procedure Browser2TreeView(WebBrowser: TWebBrowser; root:TTreeNodes);
var
  i,j, k :Integer;
  FormItem, Element, SubElement: OleVariant;
  child, child2, child3 : TTreeNode;
  s_type : string;
begin
   Assert(Assigned(WebBrowser));
   Assert(Assigned(root));

   root.Clear;

  //count forms on document
  for I:=0 to WebBrowser.OleObject.Document.forms.Length -1 do
  begin
    FormItem := WebBrowser.OleObject.Document.forms.Item(I);

    if VariantIsObject(FormItem.Name) then
       child := root.AddChild(nil, 'Form'+IntToStr(i)+': '+FormItem.Name.Name)
    else
       child := root.AddChild(nil, 'Form'+IntToStr(i)+': '+FormItem.Name);
    child.ImageIndex := 3;


    For j:= 0 to FormItem.Length-1 do
    begin
      try
         Element := FormItem.Item(j);
         child2 := root.AddChild(child, Element.Name+' = '+Element.Value);
         s_type := Element.Type;

         if s_type = 'submitthen
            child2.ImageIndex := 1
         else if s_type = 'textthen
            child2.ImageIndex := 0
         else if s_type = 'filethen
            child2.ImageIndex := 2
         else if s_type = 'hiddenthen
            child2.ImageIndex := 4
         else if s_type = 'checkboxthen
            child2.ImageIndex := 5
         else if s_type = 'radiothen
            child2.ImageIndex := 6
         else if s_type = 'select-onethen
            child2.ImageIndex := 7
         else
            child2.ImageIndex := -1;

         child3 := root.AddChild(child2, 'Type='+s_type);
         child3.ImageIndex := -1;


         if s_type = 'textthen
         begin
            child3 := root.AddChild(child2, 'MaxLen='+IntToStr(Element.maxLength));
            child3.ImageIndex := -1;
         end
         else if s_type = 'select-onethen
         begin
            for k := 0 to Element.Options.Length-1 do
            begin
               SubElement := Element.Options.Item(k);
               child3 := root.AddChild(child2, SubElement.Text+ ' = <'+SubElement.Value+'>');
               child3.ImageIndex := -1;
            end;

         end;

      except
        on E:Exception do
         root.AddChild(child, E.Message);
      end;
    end;
  end;

   if root.Count > 0 then
      root.GetFirstNode.Expand(True);
end;
Der Aufruf dazu sieht so aus: Browser2TreeView(WebBrowser1, TreeView1.Items); Dem Treeview sollte eine Imagelist mit 8 Bildchen der Grösse 16 * 16 zugeordnet werden.
Du kannst den Code im Anhang in dein Clipboard kopieren und dann das Formular anklicken und in der IDE Bearbeiten->Einfügen wählen.
Angehängte Dateien
Dateityp: txt imagelist.txt (27,5 KB, 7x aufgerufen)

Geändert von sx2008 (21. Mär 2013 um 18:04 Uhr)
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Webbrowser (Tembbeded) - Unültige Variantenoperation

  Alt 21. Mär 2013, 18:13
Hi SX

Danke vielmals für den Code.


if VariantIsObject(FormItem.Name) then

Er sagt: VariantIsObject UNdeklarierter Bezeichner. Wo / Als was kann ich das deklarieren? (Sorry bin noch ein Noob )

Das mit der TXT ist ja cool. Wusste ich gar nicht das dies so geht
Robert
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

AW: Webbrowser (Tembbeded) - Unültige Variantenoperation

  Alt 21. Mär 2013, 18:16
Er sagt: VariantIsObject UNdeklarierter Bezeichner.
Sorry, ich hatte vergessen die Funktion mitzugeben (einfach vor die Funktion Browser2TreeView() kopieren):
Delphi-Quellcode:
function VariantIsObject(const value:OleVariant):boolean;
begin
   result := (VarType(value) = varDispatch);
end;
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Webbrowser (Tembbeded) - Unültige Variantenoperation

  Alt 21. Mär 2013, 18:29
Also habe mal folgendes gemacht

Mein Code läuft durch, dann kommt die Fehlermeldung mit Ungütige Variantenoperation Dann führe ich deine Funktion aus.

Dann steht in der Treeview nur: Form0:


Interessant ist, wenn ich den letzten Teil meines Codes der den Fehler auslöst deaktiviere, und dann dein Code per Button auslöse, kommt ebenfalls die Meldung: Ungütige Variantenoperation ?
Robert
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#10

AW: Webbrowser (Tembbeded) - Unültige Variantenoperation

  Alt 21. Mär 2013, 18:42
Hi gee21,

zeigt doch mal die Deklaration Deines TForm1, zumindest die Stelle an der der WebBrowser deklariert ist.

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:49 Uhr.
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