Hi Jan,
wenn du mit der Prozedur vom SwissDelphiCenter benutzst, dann funktioniert die in zwei Fällen nicht:
- Wenn du nicht die exakte Groß- und Kleinschreibung wiedergibst und
- 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