Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: scrollbox -> radiobuttons aktivieren

  Alt 12. Aug 2005, 20:15
Deshalb:

ScrollBox = ScrollBox.Owner.Components[ScrollBox.ComponentIndex];
PS: Ich bin verrückt und helfe dir bei diesem Verbrechen - Radiobuttons in einer ScrollBox - unter OS/2 würdest du dafür in der Programmiererhölle schmoren...

Mir fallen zwei Lösungsansätze ein, für die du dir den aktuellen RadioButton im OnClick-Event merken musst:

Delphi-Quellcode:
procedure TDemoForm.RadioButtonClick(Sender: TObject);
begin
  rbChecked := Sender as TRadioButton;
end;
(1) Du verschaffst dir über einen class hack Zugang zu RadioButton.Parent.FControls und stellst über IndexOf() den Index des aktuellen RadioButton fest:

Delphi-Quellcode:
interface

type
  TDemoForm = class(TForm)
    ScrollBox: TScrollBox;
    NextButton: TButton;
    PrevButton: TButton;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    RadioButton4: TRadioButton;
    procedure NextButtonClick(Sender: TObject);
    procedure RadioButtonClick(Sender: TObject);
    procedure PrevButtonClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    rbChecked: TRadioButton;
    ...
  end;

implementation
type
  THacked = class(TWinControl)
  public
    FControls: TList;
  end;

procedure TDemoForm.PrevButtonClick(Sender: TObject);
var
  iCount, iPrev: integer;
begin
  iCount := rbChecked.Parent.ControlCount;
  iPrev := (THacked(rbChecked.Parent).FControls.IndexOf(rbChecked) + iCount - 1) mod iCount;
  with rbChecked.Parent.Controls[iPrev] as TRadioButton do
    Checked := true;
end;
(2) Alternativ packst du den Index eines jeden RadioButton in das Controls-Array seines Parent in seine Tag-property - manuell oder im OnCreate-Event der Form:

Delphi-Quellcode:
procedure TDemoForm.NextButtonClick(Sender: TObject);
var
  iCount, iNext: integer;
begin
  iCount := rbChecked.Parent.ControlCount;
  iNext := Succ(rbChecked.Tag) mod iCount;
  with rbChecked.Parent.Controls[iNext] as TRadioButton do
    Checked := true;
end;
Mag sein, dass du dich noch um ein paar Feinheiten kümmern musst - aber irgendwann musst du mir mal verraten, was dich umtreibt RadioButtons in eine ScrollBox zu packen.

Grüße vom marabu
  Mit Zitat antworten Zitat