Hola osmeg
Proba de la siguiente manera:
Código Delphi
[-]
procedure TForm1.ButtonGroup1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ButtonGroup1.IndexOfButtonAt(X, Y) in [0, 1] then
ButtonGroup1.ButtonOptions := ButtonGroup1.ButtonOptions - [gboAllowReorder]
else
ButtonGroup1.ButtonOptions := ButtonGroup1.ButtonOptions + [gboAllowReorder]
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ButtonGroup1.Items.Add.Caption := 'Primero';
ButtonGroup1.Items.Add.Caption := 'Segundo';
ButtonGroup1.Items.Add.Caption := 'Tercero';
ButtonGroup1.ButtonOptions := ButtonGroup1.ButtonOptions + [gboAllowReorder];
end;
De esa manera no podrias reordenar el "primero" ni el "segundo"
Una extension de lo anterior que se asemeja mas a lo que buscas (creo)
Código Delphi
[-]
function IsSpecialButton(AButton: TGrpButtonItem): Boolean;
begin
Result := True;
end;
procedure TForm1.ButtonGroup1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
LIndex: Integer;
LButton: TGrpButtonItem;
begin
LIndex := ButtonGroup1.IndexOfButtonAt(X, Y);
LButton := ButtonGroup1.Items[LIndex];
if LButton = NIL then
Exit;
if IsSpecialButton(LButton) then
ButtonGroup1.ButtonOptions := ButtonGroup1.ButtonOptions - [gboAllowReorder]
else
ButtonGroup1.ButtonOptions := ButtonGroup1.ButtonOptions + [gboAllowReorder]
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ButtonGroup1.Items.Add.Caption := 'Primero';
ButtonGroup1.Items.Add.Caption := 'Segundo';
ButtonGroup1.Items.Add.Caption := 'Tercero';
ButtonGroup1.ButtonOptions := ButtonGroup1.ButtonOptions + [gboAllowReorder];
end;