Entwickler-Ecke
Internet / Netzwerk - Verständnisprobleme von function WbSetEditField?
susi_777 - Do 08.02.07 08:01
Titel: Verständnisprobleme von function WbSetEditField?
Hallo,
ich habe unter
http://www.delphi-library.de/topic_mit+Feldern+und+Buttons+im+Webbrowser+arbeiten_8482.html eine Unit gefunden mit der sich Felder im Webbrowser füllen lassen.
Leider gibt es die Einschränkung:
| Zitat: |
| Kommt ein Feldname in mehreren Frames vor, wird immer der aus dem ersten Frame verwendet. Es sollte allerdings kein Problem sein für diesen Fall die Routinen zu anzupassen. |
Und genau das ist für meine Bedürfnisse nicht zweckmäßig. Es sollte so sein, dass der Wert des mehrfach vorkommenden Feldnamens in allen Frames gesetzt wird.
Und genau bei der Aufhebung dieser Einschränkung beiße ich mir die Zähne aus.
Ich vermute, die Anpassung muss in der WbSetEditField vorgenommen werden.
Nur wie?
Mein Versuch war dieser:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40:
| function WbSetEditField(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean; var Field: TPoint; I, j : integer; 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 if not WbFindField(WebBrowser, FieldName, Field) then begin Result := false; exit; end; try WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Value := Value; Result := True; except Result := false; Exit; end; end; end; end; |
Aber leider brachte das keine Änderung.
Wie und wo muss ich ansetzen, damit ein Feld in allen Forms ersetzt wird?
Schönen Gruß
Susi
jaenicke - Do 08.02.07 10:48
Delphi-Quelltext
1:
| WebBrowser.OleObject.Document.frames(0).Document.forms... |
So solltest du auf den ersten Frame zugreifen können.
Hier was dazu:
http://www.codeguru.com/forum/showthread.php?t=307192
// EDIT:
Der Fehler bei deinem Versuch ist, dass du beim ersten "Nichtfund" aus der gsnzen Prozedur rausgehst:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| if not WbFindField(WebBrowser, FieldName, Field) then begin Result := false; exit; end; |
Es soll doch aber weitergesucht werden!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| if not WbFindField(WebBrowser, FieldName, Field) then begin Continue; end else Result := True; |
susi_777 - Do 08.02.07 20:08
Hallo,
ich danke Dir schon mal - wieder - für Deine Unterstützung.
Nach der Umsetzung mit Deinem Tipp sieht das bei mir so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| function WbSetEditField(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean; var Field: TPoint; I, j : integer; FormItem: Variant; begin
for I := 0 to WebBrowser.OleObject.Document.frames.length - 1 do begin FormItem := WebBrowser.OleObject.Document.forms.Item(I); for j := 0 to FormItem.Length - 1 do begin if not WbFindField(WebBrowser, FieldName, Field) then begin Continue; end else WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Value := Value; Result := True; end; end; end; |
Leider habe ich es wohl nicht richtig umgesetzt. Das Ergebnis ist nun:
In Webseiten mit nur einem Frame wird jetzt das Feld gar nicht gesetzt, und in Webseiten mit 2 Frames wird das Feld wieder nur im 1. Frame gesetzt. Das Feld im 2. Frame bleibt leider wieder leer.
Was habe ich falsch gemacht oder anders wie muss die Schleife richtig aufgebaut werden?
susi_777 - Mi 21.02.07 17:35
Sorry, aber ich muss das jetzt mal *pushen*, denn ich hänge immer noch an diesem Problem.
Kann wirklich keiner helfen?
Gruß
Susi
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!