===== Optionsfelder (Radiobutton) ===== ==== Einleitung ==== Optionsfelder oder RadioButtons sind Steuerelemente, mit denen sich eine von mehreren Möglichkeiten auswählen lässt. Damit das funktioniert, ist es empfohlen, alle Radionbuttons, die eine bestimmte Funktion abdecken in einer RadioGroup, also einer Gruppe zusammenzufassen. Ein möglicher Einsatz wäre z.B., Ein Fenster links, mittig oder rechts anzuordnen - je nachdem, welcher RadioButton aktiv ist. RadioButtons erfordern kein spezielles Label. Stattdessen stellt ihre Eigenschaft "Caption" die Bezeichnung der Funktion zur Verfügung. {{ :cockpit-xp:addon:formulare:cp-wiki-tform-radiobutton-1-checked.png?nolink |}} ==== Codebeispiel ==== var // Variablen für TForm StartFahrerFestlegen() form : TForm; b : TButton; rg1 : TGroupBox; rb1 : TRadioButton; rb2 : TRadioButton; fine : Boolean; //----------------------------------------------------------------------- // Eingabeformular zur Entscheidung, welcher Subscreen // im Fall einer Mehrfachauswahl gezeigt werden soll procedure WaehleSubScreenAnzeige(); begin form := TForm.Create(nil); form.Caption := 'Subscreen zur Anzeige auswählen'; form.BorderStyle := bsDialog; form.SetBounds(300, 250, 424, 268); rg1 := TGroupBox.Create(form); rg1.Name := 'GroupBox1'; rg1.Parent := form; rg1.Caption := ''; rg1.Visible := true; rg1.SetBounds(20,20,374,40); rb1 := TRadioButton.Create(form); rb1.Name := 'RadioButton1'; rb1.Parent := rg1; rb1.Caption := 'Gesamtergebnis anzeigen'; rb1.Checked := True; rb1.Alignment := taRightJustify; rb1.Font.Name := 'Impact'; rb1.Font.Size := -20; rb1.SetBounds(10, 20, 374, 40); rb2 := TRadioButton.Create(form); rb2.Name := 'RadioButton2'; rb2.Parent := rg1; rb2.Caption := 'Fahrer Zusammenfassung anzeigen'; rb2.Checked := False; rb2.Alignment := taRightJustify; rb2.Font.Name := 'Impact'; rb2.Font.Size := -20; rb2.SetBounds(10, 80, 374, 40); b := TButton.Create(form); b.Name := 'Button1'; b.Parent := form; b.Font.Name := 'Impact'; b.Font.Size := -24; b.SetBounds(112, 160, 200, 60); b.Caption := 'Weiter'; b.OnClick := @ButtonClick; { same as b.OnClick := 'ButtonClick' } rb1.OnClick := @RadioButton1Click; rb2.OnClick := @RadioButton2Click; fine := False; // Formular geöffnet lassen, bis Fine wahr wird. cpShow(form); // Formular anzeigen // Solange fine den Wert false hat, immer wieder kurz warten while not fine do begin cpSleep(50); // Kurz bevor der RBS geschlossen wird (Event BeforeClose), wird die // Variable CloseForm gesetzt und das Formular geschlossen, falls es // zu diesem Zeitpunkt noch geöffnet ist if cpGetIntegerVar('CloseForm') = 99 then begin fine := True; end; end; cpFormFree(form); // Formular schließen end; //---------------------------------------------------------------------- // Handler, wenn Button geklickt wurde procedure ButtonClick(Sender: TButton); begin // Je nach Auswahl Subscreen anzeigen bzw. im Code fortfahren if rb1.Checked then cpSetIntegerVar('FahrerZusammenfassungAlsSubScreen', 0) else cpSetIntegerVar('RankingAlsSubscreen', 0 ); // Button gedrückt f.ModalResult := mrOk; // Fine sorgt für das Schließen des Formulars fine := True; end; -------------------------------------------------------------------------- // Handler, wenn RadioButton1 geklickt wurde procedure RadioButton1Click(Sender: TRadioButton); begin rb1.Checked := True; rb2.Checked := False; end; //------------------------------------------------------------------------ // Handler, wenn RadionButton2 geklickt wurde procedure RadioButton2Click(Sender: TRadioButton); begin rb1.Checked := False; rb2.Checked := True; end; // Hauptprogramm ab hier begin ... // Formular anzeigen WaehleSubScreenAnzeige(); ... end. Dieser Code zeigt das obige Bild ein. Zu beginn ist keine Option aktiviert und der Button bleibt deshalb inaktiv. Das ändert sich, sobald eine Auswahl per Mausklick auf eine der Möglichkeiten getroffen wird. Entscheidet man sich nun anders und klickt auf die bis dahin inaktive Option, wird diese aktiviert und die andere inaktiv. Diese Zustandswechsel erledigen die beiden Prozeduren vor dem eigentlichen Hauptprogramm. In diesem AddOn lässt sich je nach Auswahl das Ranking aller Fahrer als SubScreen einblenden oder eine Übersicht, wie der Fahrer sich in seiner Session geschlagen hat. {{:cockpit-xp:addon:formulare:cp-wiki-radiobutton-option-1-small.png?nolink |}} {{ :cockpit-xp:addon:formulare:cp-wiki-radiobutton-option-2-small.png?nolink|}} \\ \\ \\ \\ ==== Hinweise ==== Es ist hier zu beachten, dass RadioButton1 und RadioButton2 Elemente in einer GroupBox sind. Aus diesem Grund hat die Eigenschaft .Parent nicht das Formular (form) als Objekt, sondern ist auf die GroupBox1 (rg1) bezogen. \\ ---- [[cockpit-xp:start|Start]] - [[cockpit-xp:faq|FAQ]] - [[cockpit-xp:glossar|Glossar]] - [[cockpit-xp:sitemap|Sitemap]] - [[cockpit-xp:impressum|Impressum]]