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.

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.





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.



Start - FAQ - Glossar - Sitemap - Impressum

 
cockpit-xp/addon/formulare/tradiobutton.txt · Zuletzt geändert: 2020/11/28 12:16 (Externe Bearbeitung)