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
Zier dich nich so, ich krieg dich schon....