For a project I worked on, I needed a Radio Group component where I can focus one of the Radio Buttons but not select it (ie check it). I could not find one which worked in this fashion so I had to create my own.

The code is below. Its a bit messy and not that well encapsulated but it works:

Custom Component Unit: interface type TMyRadioGroup = class(TRadioGroup) private FSettingFocus: Boolean; function GetTopLeftButton: TRadioButton; function GetRadioButtonControl(ItemNr: Integer): TRadioButton; protected function CanModify: Boolean; override; public procedure SetFocus; override; end; var MyComponents_FormActivating: Boolean = False; MyComponents_ApplicationMinimised: Boolean = False; implementation { TMyRadioGroup } function TMyRadioGroup.CanModify: Boolean; begin Result := not FSettingFocus and Application.Active and not MyComponents_FormActivating and not MyComponents_ApplicationMinimised; end; function TMyRadioGroup.GetRadioButtonControl(ItemNr: Integer): TRadioButton; var I: Integer; begin Result := nil; for I := 0 to ControlCount-1 do begin if Controls[I] is TRadioButton then begin if TRadioButton(Controls[I]).Caption = Items[ItemNr] then begin Result := TRadioButton(Controls[I]); Break; end; end; end; end; function TMyRadioGroup.GetTopLeftButton: TRadioButton; var I: Integer; begin Result := nil; for I := 0 to ControlCount-1 do begin if Controls[I] is TRadioButton then begin if not Assigned(Result) then Result := TRadioButton(Controls[I]) else begin if (TRadioButton(Controls[I]).Left < Result.Left) or (TRadioButton(Controls[I]).Top < Result.Top) then begin Result := TRadioButton(Controls[I]); end; end; end; end; end; procedure TMyRadioGroup.SetFocus; var FocusButton: TRadioButton; begin inherited; if ItemIndex >= 0 then FocusButton := GetRadioButtonControl(ItemIndex) else FocusButton := GetTopLeftButton; if Assigned(FocusButton) then begin FSettingFocus := True; try FocusButton.SetFocus; finally FSettingFocus := False; end; end; end; Form Unit: implementation procedure TMainForm.WndProc(var Message: TMessage); begin if Message.Msg <> WM_ACTIVATE then inherited else begin MyComponents_FormActivating := True; try inherited; finally MyComponents_FormActivating := False; end; end; end; procedure TMainForm.ApplicationEventsMinimize(Sender: TObject); begin MyComponents_ApplicationMinimised := True; end; procedure TMainForm.ApplicationEventsRestore(Sender: TObject); begin MyComponents_ApplicationMinimised := False; end;