AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Auswahlliste TWebbrowser
Thema durchsuchen
Ansicht
Themen-Optionen

Auswahlliste TWebbrowser

Ein Thema von goenner90 · begonnen am 2. Aug 2008 · letzter Beitrag vom 14. Aug 2011
Antwort Antwort
goenner90

Registriert seit: 25. Dez 2007
21 Beiträge
 
Delphi 7 Enterprise
 
#1

Auswahlliste TWebbrowser

  Alt 2. Aug 2008, 03:16
Hallo,
sagen wir mal ich habe eine Auswahlliste, so wie diese hier:

Delphi-Quellcode:
<body>

<h1>W&auml;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>
[Quelle: selfhtml.org]

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
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: Auswahlliste TWebbrowser

  Alt 2. Aug 2008, 06:15
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:

 WB_select_SelectItem(Webbrowser1, 'top5','Tom Waits');
Thomas
  Mit Zitat antworten Zitat
goenner90

Registriert seit: 25. Dez 2007
21 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Auswahlliste TWebbrowser

  Alt 2. Aug 2008, 15:51
Danke Toms,
du hast es einfach drauf
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#4

Re: Auswahlliste TWebbrowser

  Alt 26. Dez 2008, 09:44
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;
Thomas
  Mit Zitat antworten Zitat
Dave729

Registriert seit: 8. Dez 2008
Ort: NRW, bald wieder in Sachsen
48 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: Auswahlliste TWebbrowser

  Alt 30. Aug 2010, 08:24
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:
[Warning] Unit1.pas(157): Return value of function 'WB_ClickLink' might be undefined
[Error] Unit1.pas(309): Undeclared identifier: 'IHTMLDocument4'
[Error] Unit1.pas(315): Undeclared identifier: 'IID_IHTMLDocument4'
ActiveX und MSHTML sind in uses drin.
Ich weiss net warum er das nicht erkennt.
Kann mir bitte einer helfen.

Ps.: Hab Delphi Version 6

MfG Dave729
Dave
Was nicht passt, wird passend gemacht

Geändert von Dave729 (30. Aug 2010 um 09:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#6

AW: Auswahlliste TWebbrowser

  Alt 5. Sep 2010, 07:23
Zitat:
Undeclared identifier: 'IHTMLDocument4'
Hallo, bei deiner MSHTML Unit handelt es sich um eine etwas ältere Version, welche neuere Interfaces etc.(von IE 7/8) noch nicht kennt.

Lösung: Eine neuere MSHTML importieren.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Jacques Murell
Jacques Murell

Registriert seit: 7. Jun 2010
113 Beiträge
 
Turbo Delphi für Win32
 
#7

AW: Auswahlliste TWebbrowser

  Alt 14. Aug 2011, 10:38
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:
<SELECT style="WIDTH: 100px" onchange="javascript:location.href='getData.php?l='+this.options[this.selectedIndex].value" size=1 name=l>
Wie kann ich dies nun ansteuern? Ich hatte es noch direkt versucht:
Delphi-Quellcode:
Element(OleVariant) := WebBrowser1.OleObject.Document.Forms.Item(0).Elements.Item(WideString('l'));
Element.value := Element.options.Item(2).value;
Leider stürzt auch hier der Debugger gnadenlos ab. Wie kann das SelectItem nun setzen?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#8

AW: Auswahlliste TWebbrowser

  Alt 14. Aug 2011, 11:00
Erstmal kann man soeine lange Verschachtelung, wie WebBrowser1.OleObject.Document.Forms.Item(0).Elements.Item(WideString('l')); locker in seine Einzelzeile zerlegen und dann schauen wo es wirklich knallt.
Zugriff auf $00000xxxx 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.

WebBrowser1.OleObject.Document.Forms. ... du sagtest doch, daß es keine Form gibt, also greif auch nicht darauf zu
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Jacques Murell
Jacques Murell

Registriert seit: 7. Jun 2010
113 Beiträge
 
Turbo Delphi für Win32
 
#9

AW: Auswahlliste TWebbrowser

  Alt 14. Aug 2011, 11:20
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:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EOleError mit der Meldung 'Die Methode 'Options' wird vom Automatisierungsobjekt nicht unterstützt' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

Geändert von Jacques Murell (14. Aug 2011 um 11:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Jacques Murell
Jacques Murell

Registriert seit: 7. Jun 2010
113 Beiträge
 
Turbo Delphi für Win32
 
#10

AW: Auswahlliste TWebbrowser

  Alt 14. Aug 2011, 12:16
Problem gelöst, danke euch.

WebBrowser1.OleObject.Document.GetElementsByName('l').Item(0).SelectedIndex := 3;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:41 Uhr.
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