Entwickler-Ecke
Sonstiges (Delphi) - RadioGroup
CindyN - Fr 12.05.06 20:28
Titel: RadioGroup
Hallo,
wir haben letzte Woche ein Projekt in der Schule gestartet, an welchem ich im Moment arbeite und ich jetzt schon bei der Gestaltung vor dem ersten Problem stehe...
Ich habe ein Hauptprogramm, mittels RadioGroup soll jetzt die Möglichkeit gegeben werden zwischen vier Unterprogrammen zu wählen. Wie setzte ich das jetzt benutzerfreundlich um? Ich hab mir jetzt überlegt, dass der Benutzer das gewünschte Unterprogramm anklickt und dann mittels eines weiteren AuswahlButtons das Programm aufruft. Dafür muss ich dann wahrscheinlich mit IF RadioButton1 click, THEN blabla...
Wie setzte ich es aber um, dass das Unterprogramm sofort aufspringt sobald der Benutzer den RadioButton an sich markiert?
LG
Marc. - Fr 12.05.06 20:36
es muss nicht mit if gearbeitet werden ;)
nutz doch einfach case ... of :P
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure radiogroupClick(sender: TObject); begin case radiogroup.itemindex of 0: begin Anweißung 1; Anweißung 2; end; 1: Anweißung 3; 2: ...
end; end; |
CindyN - Fr 12.05.06 20:46
Okay danke,
wie lautet die Anweisung das Delphi dann aufs Unterprogramm zugreift? Ich bin auf neue Anwendung und hab dann das neue Formular gestaltet, welches noch Form2 heißt.
HTML ist da wesentlich einfacher in dem Punkt :/
Marc. - Fr 12.05.06 21:57
als erstes musst du die "unit2" aus "form2" in die "unit1" von "form1" einbinden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var Form1: TForm1;
implementation uses unit2; {$R *.dfm} |
hast du das gemacht, kannst du die form mit
form2.show oder
form2.showmodal aufrufen ;)
Mfg
FFKangoroo - Sa 13.05.06 11:56
WAs auch viel toller rüberkommt und grafisch meiner meinung anch besser aussieht sind Tabs!. delphi hat die schon mit eingebunden. musst du mal suchen. (hab jetzt kein delphi vor mir) oder halt mit einer Menüleiste(Das ding oben mit Datei und so) und dann jeweils entweder eine neue form öffnen oder was auch noch gehen könnte(hab es aber nicht selber getestet und weiss auch nicht ob es funktioniert) wenn du objekte in groupboxes reintust und diese dann .visible:=true; machst. nach meienr logik her sollten bei visible= false auch die objects in der groupbox verschwinden und beim visible=true mit auftauchen. wie gesagt habs noch nicht getestet aber ein versuch ist es ja wert.(wird aber das erste sein was ich am montag zuhause machen werde ;) )
hoffe ich konnte helfen
FFKangoroo
oldmax - Sa 13.05.06 18:45
Hi
Manchmal ist nicht das besser, was optisch gut aussieht, sondern wie die Aufgabenstellung lautet und das ist, wenn ich's richtig verstanden habe, der Aufruf von Unterprogrammen über Radiobuttons
Sorry, ich bin blind ( betrifft die Radiobuttons), laßt mich aber trotzdem erklären:
Delphi-Quelltext
1: 2: 3: 4: 5:
| Radiobutton1.Caption:='Unterprogramm 1'; Radiobutton2.Caption:='Unterprogramm 2'; Radiobutton3.Caption:='Unterprogramm 3'; Radiobutton4.Caption:='Unterprogramm 4'; Radiobutton5.Caption:='Unterprogramm 5'; |
Am einfachsten ist der Aufruf von Unterprogrammen direkt über das OnClick- Ereignis der jeweiligen Radiobuttons. Nachteil: das Unterprogramm wird nur 1 mal Aufgerufen. Ein OnMouseDown erlaubt aber ein mehrfaches anklicken der Raiobuttons und somit einen erneuten Aufruf des Unterprogrammes.
Hier mal ein Beispiel zum Testen:
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.RadioButton1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Label1.Caption<>'UP1' then Label1.Caption:='UP1' else Label1.Caption:='doppelt'; end; |
Der Text im Label wechselt zwischen UP1 und doppelt.
Damit nun mehrere Radiobuttons zusammenarbeiten, packt man sie in eine Groupbox. Delphi erkennt nun selbst, das diese Radiobuttons in einer Gruppe zusammengefaßt sind und läßt jeweils nur 1 selektiertes Button zu. Trotzdem ist der UP-Aufruf nach oben genannter Art möglich. Statt irgendeinen Text zu setzen, wird an dieser Stelle das UP aufgerufen.
Die letzte Möglichkeit ist eine RadioGroup, die das vorangegangene zusammen faßt und dem Ergebnis aus Radiobuttons und Groupbox sehr ähnlich ist. Hier ist aber das ereignis OnClick auf die RadioGroup bezogen und das Ergebnis eine Integerzahl, die du dann über eine Case-Anweisung verzweigen kannst.
Nehmen wir an:
Radiogroup.Itemindex = UP 1 ( liefert beim anclicken eine 0 )
Radiogroup.Itemindex = UP 2 (liefert .... 1 ) usw
Ein erneuter Aufruf des selben Unterprogrammes ist allerdings nur mit einem Kunstgriff möglich.
Am Ende der Routine Radiogroup.ItemIndexeine -1 zuweisen. Das hat allerdings den unschönen Nebeneffekt, das das selektierte Button (Item) die Selektion (Punkt) verliert.
So ungefähr sieht's dann aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.RadioGroup1Click(Sender: TObject); Var x : Integer; begin x:= RadioGroup1.Itemindex; case x of 0: if Label1.Caption<>'UP1' then Label1.Caption:='UP1' else Label1.Caption:='doppelt'; 1: if Label1.Caption<>'UP2' then Label1.Caption:='UP2' else Label1.Caption:='doppelt'; 2: if Label1.Caption<>'UP3' then Label1.Caption:='UP3' else Label1.Caption:='doppelt'; end ; RadioGroup1.Itemindex :=-1; end; |
Ach ja, Unterprogramme sind in der Regel Procedures und Functions. Ein öffnen einer anderen Form würde ich nicht unbedingt dazuzählen. Ich glaub auch nicht, das euer Unterrichtsstoff soweit ist, den Unterschied einer modalen oder nicht modalen Form erklärt zu haben.
Aber mit diesem Gerüst und der vorherigen Info dürftest du schon etwas weiter kommen.
Gruß oldmax
Moderiert von
raziel: Delphi-Tags hinzugefügt
raiguen - So 14.05.06 22:18
Moin :-)
Prinzipiell kann man das so machen
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:
| procedure TForm1.RadioGroup1Click(Sender: TObject); var rgIndex: Integer; begin rgIndex := RadioGroup1.ItemIndex; case rgIndex of 0: begin Application.CreateForm(TForm2, Form2); Form2.Caption := RadioGroup1.Items[rgIndex]; Form2.ShowModal; Form2.Free; end; 1: begin Application.CreateForm(TForm3, Form3); Form3.Caption := RadioGroup1.Items[rgIndex]; Form3.ShowModal; Form3.Free; end; 2: begin Application.CreateForm(TForm4, Form4); Form4.Caption := RadioGroup1.Items[rgIndex]; Form4.ShowModal; Form4.Free; end; 3: begin Application.CreateForm(TForm5, Form5); Form5.Caption := RadioGroup1.Items[rgIndex]; Form5.ShowModal; Form5.Free; end; end; RadioGroup1.ItemIndex := -1; end; |
Für das Modale Erzeugen der Form2...Form4 müssen diese im Objektinspektor aus Visible := False gesetzt sein.
Die o.a. Prozedure macht folgendes: Index des geklickten RadioButton merken und je nach Index die entsprechende Form erstellen (
CreateForm), die Fensterleiste(
FormX.Caption) erhält den Titel des geklickten RadioButtons(
RadioGroup1.Items[rgIndex]). Nach dem Schließen der Form wird diese wieder freigegeben(
FormX.Free) und die RadioButtons werden deselektiert(Index auf -1 setzen).
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!