Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Wieder einmal: Felder im WebBrowser ausfüllen (https://www.delphipraxis.net/188102-wieder-einmal-felder-im-webbrowser-ausfuellen.html)

Rued 31. Jan 2016 14:35

Wieder einmal: Felder im WebBrowser ausfüllen
 
Hallo!

Man kennt die Zeile für das Ausfüllen von Formularfeldern im WebBrowser:

Code:
WebBrowser1.OleObject.document.forms.item(0).elements.item('FELDNAME').value := Edit1.Text
Ist es möglich, den Namen der elements.item im Formular abzufragen? So etwas wie Findcomponent oder if ...name = 'FELDNAME' then

Was bei mir nicht funktioniert ist die Namensabfrage über:

Code:
  FormItem: Variant;
begin

...
   for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do begin
    FormItem := WebBrowser.OleObject.Document.forms.Item(I);
   for j := 0 to FormItem.Length - 1 do
    begin
      try                                          
        if FormItem.Item(j).Name = 'FELDNAME' then ...
Agiere ich "blind", funktioniert es:
Code:
for b := 0 to WebBrowser.OleObject.Document.all.tags('FORM').Length -1 do
         WebBrowser.OleObject.document.forms.item(b).elements.item('FELDNAME').value := 'Wert';
Geht es nicht eleganter?

Gruß

Rüd

ScharfeMietze 31. Jan 2016 14:46

AW: Wieder einmal: Felder im WebBrowser ausfüllen
 
Delphi-Quellcode:
for I := 0 to wb.OleObject.Document.forms.Length - 1 do begin
    FormItem := wb.OleObject.Document.forms.Item(I);
    for j := 0 to FormItem.Length - 1 do begin
     memo1.lines.Add(FormItem.Item(j).Name);
    end;
aber wenn du den feldnamen doch kennst,
Delphi-Quellcode:
Edit1.Text:= WebBrowser1.OleObject.document.forms.item(0).elements.item('FELDNAME').value
würde das auch gehen.

Was genau willst du den tun?

Gruß

Rued 31. Jan 2016 16:23

AW: Wieder einmal: Felder im WebBrowser ausfüllen
 
Zitat:

Zitat von ScharfeMietze (Beitrag 1328877)
...
Was genau willst du denn tun?

Gruß

Ich will ein Formularfeld im Webbrowser mit bekanntem Namen ausfüllen, ohne eine Schleife durchlaufen zu müssen.

Gruß

Rüd

ScharfeMietze 31. Jan 2016 18:49

AW: Wieder einmal: Felder im WebBrowser ausfüllen
 
Delphi-Quellcode:
WebBrowser1.OleObject.document.forms.item(0).elements.item('FELDNAME').value := Edit1.Text
tut doch genau das.

Falls in das Edit mit Copy&Paste eingefügt wird und ungewollte Leerzeicheichen mit drin sind.
Delphi-Quellcode:
WebBrowser1.OleObject.document.forms.item(0).elements.item('FELDNAME').value := Trim(Edit1.Text)
Du musst nur das 'FELDNAME' durch 'DenrealenNamendesFeldes' ersetzen.

Es sein das die .forms.item() nicht 0 ist.
Testen kann man das so
Delphi-Quellcode:
  try
   for I := 0 to 20 do
    begin
     WebBrowser1.OleObject.document.forms.item(I).elements.item('DenrichtigenNamendesFeldes').value:=Trim(Edit1.Text);
     ShowMessage(IntToStr(I));
    end;
  except
  end; // try
Gruß
SM;)

Rued 31. Jan 2016 20:48

AW: Wieder einmal: Felder im WebBrowser ausfüllen
 
Zitat:

Zitat von ScharfeMietze (Beitrag 1328895)
Delphi-Quellcode:
WebBrowser1.OleObject.document.forms.item(0).elements.item('FELDNAME').value := Edit1.Text
tut doch genau das.

Falls in das Edit mit Copy&Paste eingefügt wird und ungewollte Leerzeicheichen mit drin sind.
Delphi-Quellcode:
WebBrowser1.OleObject.document.forms.item(0).elements.item('FELDNAME').value := Trim(Edit1.Text)
Du musst nur das 'FELDNAME' durch 'DenrealenNamendesFeldes' ersetzen.

Es sein das die .forms.item() nicht 0 ist.
Testen kann man das so
Delphi-Quellcode:
  try
   for I := 0 to 20 do
    begin
     WebBrowser1.OleObject.document.forms.item(I).elements.item('DenrichtigenNamendesFeldes').value:=Trim(Edit1.Text);
     ShowMessage(IntToStr(I));
    end;
  except
  end; // try
Gruß
SM;)


Das ist genau die Lösung, die ich in meinem Ursprungs-Beitrag als "blind" bezeichne, da ich über eine Schleife operiere, die testet und den Wert somit nicht zielgerichtet setzt. Ich fragte nach einer eleganteren Lösung. Wenn es die nicht gibt, dann kann ich meinen Code halt nicht optimieren.

Gruß

Rüd

ScharfeMietze 31. Jan 2016 21:26

AW: Wieder einmal: Felder im WebBrowser ausfüllen
 
Du bekommst doch in der Message den Wert den du statt I einsetzen kannst um dann die Schleife wegzulassen.

Wahlweise kannst du auch statt dem Integer den 'Formnamen' eingeben.

Delphi-Quellcode:
embdwb1.OleObject.document.forms.item('vbform').elements.item('message').value := Value;
Delphi-Quellcode:
embdwb1.OleObject.Document.GetElementByID('Feldname').value := Value;
Kannst du auch testen.

Wenn du auf Embedded WB wechselst hast du z.B. FillForm, in dem du nur noch den Namen und die Message einträgst. Es gibt da schon einige Wege nach Rom.

Gruß
SM;)



Ps:
Delphi-Quellcode:
try                                        
        if FormItem.Item(j).Name = 'FELDNAME' then ...
Wenn ich das richtig sehe vergleichst du dort die FormNamen mit dem Feldnamen. Das sollte auch so nicht funktionieren.

Rued 1. Feb 2016 15:14

AW: Wieder einmal: Felder im WebBrowser ausfüllen
 
Zitat:

Zitat von ScharfeMietze (Beitrag 1328902)
Du bekommst doch in der Message den Wert den du statt I einsetzen kannst um dann die Schleife wegzulassen.

Wahlweise kannst du auch statt dem Integer den 'Formnamen' eingeben.

Delphi-Quellcode:
embdwb1.OleObject.document.forms.item('vbform').elements.item('message').value := Value;
Delphi-Quellcode:
embdwb1.OleObject.Document.GetElementByID('Feldname').value := Value;
Kannst du auch testen.

Wenn du auf Embedded WB wechselst hast du z.B. FillForm, in dem du nur noch den Namen und die Message einträgst. Es gibt da schon einige Wege nach Rom.

Gruß
SM;)

Also geht es nur über die Schleife...
Den Embedded habe ich lange Zeit eingebaut, wollte jetzt die "Fremd"-Komponenten `mal reduzieren.

Zitat:

Zitat von ScharfeMietze (Beitrag 1328902)
Ps:
Delphi-Quellcode:
try                                        
        if FormItem.Item(j).Name = 'FELDNAME' then ...
Wenn ich das richtig sehe vergleichst du dort die FormNamen mit dem Feldnamen. Das sollte auch so nicht funktionieren.

Da wirst Du wohl recht haben, hatte ich hier gefunden.

Gruß

Rüd

ScharfeMietze 1. Feb 2016 15:30

AW: Wieder einmal: Felder im WebBrowser ausfüllen
 
Normalerweise solltest du keine Schleife brauchen.

Du nimmst dir einen Button zum Testen mit
Delphi-Quellcode:
  try
   for I := 0 to 20 do
    begin
     WebBrowser1.OleObject.document.forms.item(I).elements.item('DenrichtigenNamendesFeldes').value:=Trim(Edit1.Text);
     ShowMessage(IntToStr(I));
    end;
  except
  end; // try
Wenn eine Message aufgeht mit einer Zahl, nimmst du dir einen weiteren Button und trägst einfach,
Delphi-Quellcode:
procedure Tfrm1.btn1Click(Sender: TObject);
begin
WebBrowser1.OleObject.document.forms.item('DieZahlausderMessage').elements.item('DenrichtigenNamendesFeldes').value:=Trim(Edit1.Text);
end;
ein.

Rued 1. Feb 2016 15:56

AW: Wieder einmal: Felder im WebBrowser ausfüllen
 
Zitat:

Zitat von ScharfeMietze (Beitrag 1328984)
Normalerweise solltest du keine Schleife brauchen.

Du nimmst dir einen Button zum Testen mit
Delphi-Quellcode:
  try
   for I := 0 to 20 do
    begin
     WebBrowser1.OleObject.document.forms.item(I).elements.item('DenrichtigenNamendesFeldes').value:=Trim(Edit1.Text);
     ShowMessage(IntToStr(I));
    end;
  except
  end; // try
Wenn eine Message aufgeht mit einer Zahl, nimmst du dir einen weiteren Button und trägst einfach,
Delphi-Quellcode:
procedure Tfrm1.btn1Click(Sender: TObject);
begin
WebBrowser1.OleObject.document.forms.item('DieZahlausderMessage').elements.item('DenrichtigenNamendesFeldes').value:=Trim(Edit1.Text);
end;
ein.

Ich habe das schon verstanden. Aber zum "Testen" brauchst Du sehr wohl eine Schleife und ich suchte nach einer Möglichkeit, die bspw. der parent-Eigenschaft oder Ähnlichem entspricht. Also ohne Test, ohne try and error.

Hintergrund ist, dass ich eine Vielzahl verschiedener Formulare habe. Aber ich mache es jetzt mit der Test-try-and-error-Schleife.

Danke Dir!

Gruß

Rüd

ScharfeMietze 1. Feb 2016 16:20

AW: Wieder einmal: Felder im WebBrowser ausfüllen
 
Es ist schwierig dir bei ungenauen Angaben zu helfen!!
Zitat:

Ich will ein Formularfeld im Webbrowser mit bekanntem Namen ausfüllen, ohne eine Schleife durchlaufen zu müssen.
nun sagst du
Zitat:

Hintergrund ist, dass ich eine Vielzahl verschiedener Formulare habe.
Daher wären mehr Details von Vorteil. Da man natürlich auch wenn die Formulare bekannt sind was tun kann.

Delphi-Quellcode:
embdwb1.OleObject.Document.GetElementByID('Feldname').value := trim(edit1.text);
mal probiert?


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