Einzelnen Beitrag anzeigen

Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Radiogroup / TRadiogroup unter FMX / Firemonkey

  Alt 5. Nov 2016, 23:21
Du könntest für die GroupBox z.B. einen Classhelper verwenden, um ItemIndex mit relativ wenig Veränderungsaufwand in der bisherigen Notation weiter zu verwenden.

Die Lösung setzt allerdings voraus, dass Du die "TAG"-Eigenschften der verwendeten TRadioButtons, die in der GroipBox liegen, selber zuvor manuell durchnumerierst.

Delphi-Quellcode:
unit Unit38;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.Controls.Presentation, FMX.Layouts, FMX.ListBox, FMX.Edit, FMX.EditBox,
  FMX.SpinBox;

type
  TRadioGroupHelper = class helper for TGroupBox
    // Setzt voraus, dass die TAG-Werte der TRadioButton manuell zuvor auf 0..x durchnumeriert wurden
    function ItemIndex: Integer;
    procedure SetItemIndex (NewIndex: Integer);
  end;

  TForm38 = class(TForm)
    RadioButton0: TRadioButton;
    GroupBox1: TGroupBox;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    bnGetIndex: TButton;
    bnSetIndex: TButton;
    procedure bnGetIndexClick(Sender: TObject);
    procedure bnSetIndexClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form38: TForm38;

implementation

{$R *.fmx}

{ TRadioGroupHelper }

function TRadioGroupHelper.ItemIndex: Integer;
var
  L: Integer;
begin
  Result := -1;

  for L := 0 to ChildrenCount-1 do begin
    if Children[L] is TRadioButton then begin
      if (Children[L] as TRadioButton).IsChecked then begin
        Result := (Children[L] as TRadioButton).Tag;
      end;
    end;
  end;
end;

procedure TRadioGroupHelper.SetItemIndex(NewIndex: Integer);
var
  L: Integer;
begin
  for L := 0 to ChildrenCount-1 do begin
    if Children[L] is TRadioButton then begin
      if (Children[L] as TRadioButton).Tag = NewIndex then begin
        (Children[L] as TRadioButton).IsChecked := True;
      end;
    end;
  end;
end;

// Test

procedure TForm38.bnGetIndexClick(Sender: TObject);
begin
  ShowMessage (GroupBox1.ItemIndex.ToString);
end;

procedure TForm38.bnSetIndexClick(Sender: TObject);
begin
  GroupBox1.SetItemIndex (1); // statt GroupBox1.itemIndex := 1;
end;


end.
Davon abgesehen: Emba betont immer, dass sie das machen, was die User wünschen und dafür gibt es den Feature-Request. Schlage doch einfach mal vor, dass es auch eine RadioGoup-Komponente in FMX geben soll, wenn die Dir so sehr fehlt.
  Mit Zitat antworten Zitat