![]() |
Auswahlliste TWebbrowser
Hallo,
sagen wir mal ich habe eine Auswahlliste, so wie diese hier:
Delphi-Quellcode:
[Quelle: selfhtml.org]
<body>
<h1>Wählen Sie Ihren Favoriten!</h1> <form action="select.htm"> <select name="top5" size="3"> <option>Heino</option> <option>Michael Jackson</option> <option>Tom Waits</option> <option>Nina Hagen</option> <option>Marianne Rosenberg</option> </select> </p> </form> </body> </html> und zwar ist meine Frage , wie ich da jetzt etwas über den twebbrowser auswähle in Formularen . Ausfüllen von edits geht ja recht einfach aber das hab ich nicht hinbekommen....[ auf der Site sind mehrere Forms also net nur eins , das wird ja wichtig sein denke ich ;-) ] Ich Freu mich auf eure Antworten. mfg Goenner90 |
Re: Auswahlliste TWebbrowser
Ich habe mal folgende Funktion zum Auswählen eines Items aus einer Liste geschrieben:
Delphi-Quellcode:
function WB_select_SelectItem(WB: TWebBrowser; SelectName, ItemName: string): boolean;
var iForms, iFormItems, iSelectItems: Word; FormItem: OleVariant; begin Result := False; for iForms := 0 to WB.OleObject.Document.forms.Length - 1 do begin FormItem := WB.OleObject.Document.forms.Item(iForms); for iFormItems := 0 to FormItem.Length - 1 do begin if (FormItem.Item(iFormItems).type = 'select-one') and (FormItem.Item(iFormItems).Name = SelectName) then begin for iSelectItems := 0 to FormItem.Item(iFormItems).Options.Length - 1 do begin if SameText(FormItem.Item(iFormItems).Options.Item(iSelectItems).Text, ItemName) then begin FormItem.Item(iFormItems).SelectedIndex := iSelectItems; Result := True; Break; end; end; end; end; end; end; Aufruf für obiges Beispiel würde so aussehen:
Delphi-Quellcode:
WB_select_SelectItem(Webbrowser1, 'top5','Tom Waits');
|
Re: Auswahlliste TWebbrowser
Danke Toms,
du hast es einfach drauf ;-) |
Re: Auswahlliste TWebbrowser
Update: Das OnChange Ereignis des DropDowns wird nicht ausgelöst, wenn ein Item per Code ausgewählt wird.
Delphi-Quellcode:
uses
mshtml_tlb, ActiveX; function TriggerEvent(WB: TWebbrowser; Element: OleVariant; EventName: WideString): Boolean; var Doc4: IHTMLDocument4; Doc2: IHTMLDocument2; EventObj: IHTMLEventObj; varEventObj, pEventObject: OleVariant; begin Result := False; if (Succeeded(WB.Document.QueryInterface(IID_IHTMLDocument4, Doc4))) then begin // TVariantArg(ret).vt := VT_UINT; // TVariantArg(ret).lVal := 0; varEventObj := Unassigned; EventObj := Doc4.CreateEventObject(varEventObj); if (Succeeded(WB.Document.QueryInterface(IID_IHTMLDocument2, Doc2))) then begin pEventObject := EventObj; try Result := Element.fireEvent(EventName, pEventObject); except Result := False; end; end; end; end; function WB_select_SelectItem(WB: TWebbrowser; SelectName, ItemName: string; TriggerOnChangeEvent: Boolean): boolean; var iForms, iFormItems, iSelectItems: Word; FormItem: OleVariant; begin Result := False; for iForms := 0 to WB.OleObject.Document.forms.Length - 1 do begin FormItem := WB.OleObject.Document.forms.Item(iForms); for iFormItems := 0 to FormItem.Length - 1 do begin if (FormItem.Item(iFormItems).type = 'select-one') and (FormItem.Item(iFormItems).Name = SelectName) then begin for iSelectItems := 0 to FormItem.Item(iFormItems).Options.Length - 1 do begin if SameText(FormItem.Item(iFormItems).Options.Item(iSelectItems).Text, ItemName) then begin FormItem.Item(iFormItems).SelectedIndex := iSelectItems; // The onchange event does not fire when the selected option of // the select object is changed programatically // http://msdn.microsoft.com/en-us/library/ms536912(VS.85).aspx if TriggerOnChangeEvent then // Trigger OnChange event: TriggerEvent(WB, FormItem.Item(iFormItems), 'onchange'); Result := True; Break; end; end; end; end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin WB_select_SelectItem(Webbrowser1,'url','Germany', True); end; procedure TForm1.FormCreate(Sender: TObject); begin Webbrowser1.Navigate('http://www.mathworks.com/company/worldwide/'); end; |
AW: Auswahlliste TWebbrowser
Hallo
srry wenn ich das Thema jetzt mal wieder aufwecken muss. Hab alles gemacht wie es hier steht (von Toms beitrag). Nur, das kleine Problem was ich habe ist das : Zitat:
Ich weiss net warum er das nicht erkennt. Kann mir bitte einer helfen. Ps.: Hab Delphi Version 6 MfG Dave729 |
AW: Auswahlliste TWebbrowser
Zitat:
Lösung: ![]() |
AW: Auswahlliste TWebbrowser
Hallo nochmal,
ich hoffe Ihr könnt mir nochmal kurz helfen. Der von toms gepostete Code funktioniert tadellos, solange das SELECT-Element auch wirklich auf einem Form liegt, also von <form></form> umschlossen ist. Ist das nicht der Fall, stürzt die Funktion gnadenlos mit Fehler beim Lesen von Adresse 0000000 ab. Bei meiner Webseite ist das der Fall, es liegt kein Form vor, das Element steht einfach so im Quelltext:
Code:
Wie kann ich dies nun ansteuern? Ich hatte es noch direkt versucht:
<SELECT style="WIDTH: 100px" onchange="javascript:location.href='getData.php?l='+this.options[this.selectedIndex].value" size=1 name=l>
Delphi-Quellcode:
Leider stürzt auch hier der Debugger gnadenlos ab. Wie kann das SelectItem nun setzen?
Element(OleVariant) := WebBrowser1.OleObject.Document.Forms.Item(0).Elements.Item(WideString('l'));
Element.value := Element.options.Item(2).value; |
AW: Auswahlliste TWebbrowser
Erstmal kann man soeine lange Verschachtelung, wie
Delphi-Quellcode:
locker in seine Einzelzeile zerlegen und dann schauen wo es wirklich knallt.
WebBrowser1.OleObject.Document.Forms.Item(0).Elements.Item(WideString('l'));
Delphi-Quellcode:
sagt dir doch, daß da irgendwo etwas nil ist und du dennoch gnadenlos versuchst drauf zuzugreifen ... also wunder dich blos nicht über die gnadenlose Reaktion vom Delphi.
Zugriff auf $00000xxxx
Delphi-Quellcode:
... du sagtest doch, daß es keine Form gibt, also greif auch nicht darauf zu :!:
WebBrowser1.OleObject.Document.Forms.
Wenn das SELECT eine ID hätte, dann könnte man es über diese global (und nicht in einer nichtexistierenden Form) über seine ID suchen oder man sucht eben global über den TagNamen. |
AW: Auswahlliste TWebbrowser
Ja das stimmt natürlich. ;)
Delphi-Quellcode:
:-(
Element := WebBrowser1.OleObject.Document.GetElementsByName('l'); // Scheint zu klappen
selcount := Element.options.Length; // Jetzt kracht es hier, was ich nicht verstehe da diese Zeile bei anderen Select-Elementen die auf Forms liegen klappt Zitat:
|
AW: Auswahlliste TWebbrowser
Problem gelöst, danke euch.
Delphi-Quellcode:
WebBrowser1.OleObject.Document.GetElementsByName('l').Item(0).SelectedIndex := 3;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz