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