Entwickler-Ecke

Internet / Netzwerk - RadioButton auswählen


schdom14 - So 07.09.03 19:51
Titel: RadioButton auswählen
Kann mir jemand sagen wie ich im TWebBrowser einen RadioButton automatich auswählen kann ????? Wie ich einen auswähle weiss ich, problem ist halt es sind 2 RadioButtons die den gleichen namen haben, nur die value ist unterschiedlich, und das ist auch mein problem.

könnt ihr mir helfen ???? BIIIIITTTTEEEE ich bin am verzweifeln :cry:

Thx

Moderiert von user profile iconTino: Überflüssige Absätze entfernt.


DaRkFiRe - Mo 08.09.03 00:40

document.<formname>.<radioname>[0] bzw
document.<formname>.<radioname>[1]

siehe Selfhtml


schdom14 - Mo 08.09.03 11:16

das geht nicht, aber danke für deine antwort.
Hat sonst noch jemand einen vorschlag ????

Thx


barfuesser - Mo 08.09.03 12:26

Wieso geht das nicht?

barfuesser


schdom14 - Mo 08.09.03 12:42

ja wieso geht das nicht ??? Wenn ich das wüsste wäre ich froh. ka woran das liegt (bin ja auch noch ein kleiner newbie :roll: ). könnte mir mal jemand nen kleinen code posten wo das funktioniert (Ein TWebBrowser und ein Button) nur damit ich weiss wie das aussehen soll.

Thx

Moderiert von user profile iconTino: Überflüssige Absätze entfernt.


Tino - Mo 08.09.03 15:56

schdom14 hat folgendes geschrieben:
das geht nicht, aber danke für deine antwort.

Dann poste doch mal den Sourcecode der nicht klappt. Dann können wir besser helfen.

Gruß
Tino


schdom14 - Mo 08.09.03 16:53


Delphi-Quelltext
1:
WebBrowser1.OleObject.document.forms.item('Formname').elements.item('Radiobutton').value('1');                    

So hab ich es gemacht, weil anders geht garnichts. So startet er, wählt den Button aber nicht aus. Was is daran falsch ???? :oops:


DaRkFiRe - Mo 08.09.03 19:58

Wenn Du jetzt ...

Quelltext
1:
2:
3:
4:
<form NAME="Kramform">
<input TYPE="radio" NAME="Kram">Kram 1<br>
<input TYPE="radio" NAME="Kram">Kram 2
</form>

..hast, dann muss das in Delphi so heißen (zum anchecken, des 2. Elements [also Kram 2]):

Delphi-Quelltext
1:
WebBrowser1.OleObject.document.forms.Kramform.Kram[1].checked:=checked;                    

...also soweit die Theorie laut SelfHTML

Moderiert von user profile iconTino: Code- & Delphi-Tags hinzugefügt.


schdom14 - Mo 08.09.03 21:15

Also zunächst: Bitte nicht hauen weil ich nerve. Habs jetzt so gemacht wie gesagt, erst voll gefreut, juhu program startet, aber dan krieg ich vom WebBrowser die Meldung das er das objekt nicht finden kann :( . ich glaube wir sind schon einen schritt weiter, oder ???????

Bitte helft mir weiter. *auf knien fleh* oder lasst es wenn ihr kein bock mehr habt *nicht hoff*

Ach übrigens habs ma mit ner einzelnen checkbox im browser gemacht die als einzige diesen namen hat und da gings mit folgendem code.

Delphi-Quelltext
1:
WebBrowser1.OleObject.Document.Forms.item('Formname').Elements.item('boxname').checked:=true;                    

Nur wenn die buttons denn selben namen und ne unterschiedliche value haben, dann gehts nicht.

Thx

Moderiert von user profile iconTino: Überflüssige Absätze entfernt.


DaRkFiRe - Di 09.09.03 20:45

Also wenn die Exception kommt, dass er das Objekt nicht kennt - dann könnte es vielleicht daran liegen, dass er es wirklich nich kennt!?

Bei mir hat das immer gefunzt, wenn ich die Namen (in GROß UND kleinschrift) exakt referenziert habe. Poste doch mal den komplette Source in den Form-Tags (inkl. Form-Tags) Deines HTML Files. Ich glaube kaum, dass Du Deine Form "formname" genannt hast, oder?

Also mach ma...


schdom14 - Di 09.09.03 21:30

also bevor das noch länger so geht poste ich mal die seite um die es sich handelt und dan kann jeder der lust und zeit hat mal sehen ob er das hin bekommt. http://www.tripod.lycos.de/signup/signup.phtml

Es geht um den RadioButton wo "Geschlecht" steht. Wenn mir einen nen Code posten könnte wie man einen von denn beiden automatich gecheckt bekommt, wäre ich sehr dankbar. denn ich bin wohl zu blöd dafür.

Thx

Moderiert von user profile iconTino: Überflüssige Absätze entfernt.


schdom14 - Do 11.09.03 14:01

ich bins schon wieder :D
will ja nicht nerven aber es wäre echt wichtig. Wäre also nett wenn mir mal einen nen funktionierenden code geben würde.

Thx


JustusJonas - Do 11.09.03 14:06

Das Problem bei dieser Website ist, dass es sich um keine "normalen" Radio-Buttons handelt. Normalerweise kann man mit Value oder Click einen Button anwählen, aber hier haben beide den selben Namen! :(

Greetz


schdom14 - Do 11.09.03 14:48

@ JustusJonas
wenigstens antwortet mir mal einer.
Aber es gibt da doch bestimm eine möglichkeit den truzdem auszuwählen,
oder ???? Ich weiss das nämlich nicht, bin ja leider noch ein newbie in sachen delphi.Leider


Thx


DaRkFiRe - Fr 12.09.03 07:26

Versuch's bei diesem "Beispiel" mal mit

Quelltext
1:
document.mysignup._sexe[0].checked = true;                    


für männlich und


Quelltext
1:
document.mysignup._sexe[1].checked = true;                    


für weiblich.

Müsste eigentlich funzen.


JustusJonas - Fr 12.09.03 08:09

DaRkFiRe hat folgendes geschrieben:
Versuch's bei diesem "Beispiel" mal mit

Quelltext
1:
document.mysignup._sexe[0].checked = true;                    


für männlich und


Quelltext
1:
document.mysignup._sexe[1].checked = true;                    


für weiblich.

Müsste eigentlich funzen.


Nein so funktioniert es eben nicht.
1. müsste es checked := true; heißen und dann funktioniert der komplette Code bei mir nicht.

Ich habe eben noch ein wenig rumprobiert und komme der Sache (glaube ich) schon ein wenig näher. Ich bleib dran!

Greetz


DaRkFiRe - Fr 12.09.03 11:57

Sag mal, sprichst Du jetzt über das Aktivieren per Delphi-Browser oder per JavaScript.

Falls Delphi, dann ist checked:= true; natürlich richtig.
Sonst versuch mal checked:="checked";

Stell mal Dein Prog mit Source online - dann kann man da mal schauen...


kasi - Fr 12.09.03 16:13

Scheint ein Bug zu sein.
Folgendes hat bei mir funktioniert.

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:
41:
42:
43:
44:
45:
46:
47:
48:
procedure CheckHTMLRadioButton(Doc: IHTMLDocument2; Formname, RBName, RBValue: string);
var
  IHTMLForm: IHTMLFormElement;
  IHTMLInput: IHTMLInputElement;
  IHTMLElem: IHTMLElement;
  IElements: IHTMLElementCollection;
  i,j: integer;

begin
for i := 0 to Doc.forms.length-1 do
  begin
  IHTMLForm := Doc.forms.Item(i, i) as IHTMLFormElement;
  if IHTMLForm.name = Formname then
    begin
    IHTMLForm.QueryInterface(IID_IHTMLElement, IHTMLElem);
    IElements := IHTMLElem.all as IHTMLElementCollection;
    for j := 0 to IElements.length-1 do
      begin
      IHTMLElem := IElements.Item(j,j) as IHTMLElement;
      if (IHTMLElem.tagName = 'INPUT') then
        begin
        IHTMLInput := IHTMLElem as IHTMLInputElement;
        if (IHTMLInput.name=RBName) and (IHTMLInput.value = RBValue) then
          IHTMLInput.checked := true;
        end;
      end;
    end;
  end;
end;

procedure CheckRadioButton(Browser: TWebBrowser; Formname, RBName, RBNumber: string);
var
  win: IHTMLWindow2;

begin
win := (Browser.Document as IHTMLDocument2).parentWindow;
win.execScript('document.'+Formname+'.'+RBName+'['+RBNumber+'].checked=''checked''','javascript');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
CheckRadioButton(WebBrowser1,'mysignup','_sexe','1'); // oder '0' 
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
CheckHTMLRadioButton(Webbrowser1.Document as IHTMLDocument2, 'mysignup','_sexe','1'); // oder '2'
end;


KASI


schdom14 - Sa 13.09.03 17:44

@kasi
könntest du den code mal erklären ??? So versteh ich höchstens 40% :oops: . Und was für elemente muss ich in meine form einbauen ??
Wenn ich den so übernehme geht das nämlich nicht.
Sorry ich weis ich nerve, tut mir leid.


Thx


kasi - Sa 13.09.03 21:33

in uses musst Du mshtml bzw. mshtml_tlb einbinden. Dort sind alle Interfaces für HTML-Elemente definiert.

In der ersten Funktion suche ich zunächst nach dem richtigen Form Tag. Danach untersuche ich alle Unterelemente dieses Form-Tags und wenn ich ein Input-Tag mit dem Namen RBName und dem Wert RGValue finde setze ich checked auf true.

Die zweite Funktion führt javascript auf der Seite aus.

KASI


schdom14 - Sa 13.09.03 22:28

JUHUUUUU
@kasi du bist ein Gott :lol:
wenn ich gross bin will ich auch ein kasi werden :wink:



Thx


DaRkFiRe - So 14.09.03 00:42

Alter, der Bug is ja übelste Sorte - willste damit meinen, dass das aus Delphi DIREKT nich geht (also über die Variants) aber mit dem Code-Ausführen aber geht?

Oh oh oh, da hat jemand dann aber mächtig geschludert...


JustusJonas - Mo 15.09.03 10:26

Sollte man Tripod mal 'ne Mail schreiben! ;)

Greetz