Einzelnen Beitrag anzeigen

Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#7
  Alt 2. Jan 2003, 17:22
Hi Jan,

wenn du mit der Prozedur vom SwissDelphiCenter benutzst, dann funktioniert die in zwei Fällen nicht:
  1. Wenn du nicht die exakte Groß- und Kleinschreibung wiedergibst und
  2. wenn das Feld kein name-Attribut sonder nur noch das neuere id-Attribut hat.
Das kann man umgehen, indem man die Prozedur etwas abändert:
Delphi-Quellcode:
function FillForm(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean;
var
  i, j: Integer;
  FormItem: Variant;
begin
  Result := False;
  //no form on document
  if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then
    Exit;
    
  //count forms on document
  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
      try
        //when the fieldname is found, try to fill out
        if (LowerCase(FormItem.Item(j).Name) = LowerCase(FieldName)) or
           (LowerCase(FormItem.Item(j).Id) = LowerCase(FieldName))
        then begin
          FormItem.Item(j).Value := Value;
          Result := True;
        end;
      except
        Exit;
      end;
  end;
end;
Dann funktioniert die Operation mit dem OnDocumentComplete-Ereignis wunderbar:
Delphi-Quellcode:
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  FillForm(WebBrowser1, 'Test', 'Test');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate('http://localhost/test.html');
end;
(Folgende HTML-Date wurde benutzt.)
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                      "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <title>Test</title>
  </head>
  <body>
    <form>
      <input type="text" id="tEsT">
    </form>
  </body>
</html>
MfG,
d3g
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat