¿Hay alguna manera de Habilitar/Deshabilitar los items de un ButtonGroup?, o al menos, sobreescribir la clase TgrpButtonItem y agregarle la propiedad?

Habilitar/Deshabilitar Items de un TButtonGroup
#1
Escrito 25 octubre 2016 - 10:19
#2
Escrito 25 octubre 2016 - 10:28
¿Hay alguna manera de Habilitar/Deshabilitar los items de un ButtonGroup?, o al menos, sobreescribir la clase TgrpButtonItem y agregarle la propiedad?
De poder debería poderse, que tal con algun cast..... bueno, asi al aire y sin mirar el componente.
Saludos
#3
Escrito 25 octubre 2016 - 10:48
Ya había probado con:
TCustomControl(ButtonGroup1.Items.Items[2]).Enabled := False; //Excepción 000000 TButton(").Enabled := False; //Excepción 000000 TWinControl(").Enabled := False; //Excepción 000000
#4
Escrito 25 octubre 2016 - 11:17
Ya había probado con:
delphi
TCustomControl(ButtonGroup1.Items.Items[2]).Enabled := False; //Excepción 000000 TButton(").Enabled := False; //Excepción 000000 TWinControl(").Enabled := False; //Excepción 000000
Vaya, algo no le gustó.
Voy a ver que se puede hacer.
Saludos
#5
Escrito 25 octubre 2016 - 12:34
Por el momento tuve que improvisar utilizando un TFlowPanel con TButtons y así tengo un TButtonGroup similar, aunque prefier éste último, mientras espero por una solución si es que aparece.
Saludos.
#6
Escrito 25 octubre 2016 - 03:40
Lo que podes hacer es usar acciones y manejarte con el Enabled del TAction
#7
Escrito 25 octubre 2016 - 03:44
Aunque tambien podrias implementar el "Enabled" dentro de los botones, pero lo que no se como hacer es como deshabilitar para que el elemento no pueda hacersele click (la parte visual de presionar el boton, vamos)
Revisa este codigo de pruebas
unit Unit1; interface uses System.Classes, Vcl.Forms, Vcl.Dialogs, Vcl.Controls, Vcl.ButtonGroup; type TButtonGroup = class(Vcl.ButtonGroup.TButtonGroup) protected procedure DoItemClicked(const Index: Integer); override; function GetButtonClass: TGrpButtonItemClass; override; end; TGrpButtonItemEx = class(TGrpButtonItem) private FEnabled: Boolean; procedure SetEnabled(const Value: Boolean); public constructor Create(Collection: TCollection); override; property Enabled: Boolean read FEnabled write SetEnabled; end; TForm1 = class(TForm) ButtonGroup1: TButtonGroup; procedure FormCreate(Sender: TObject); procedure ItemClick(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.ItemClick(Sender: TObject); begin ShowMessage('ItemClick'); end; procedure TForm1.FormCreate(Sender: TObject); begin ButtonGroup1.ButtonOptions := [gboFullSize, gboShowCaptions]; ButtonGroup1.Items[0].OnClick := ItemClick; ButtonGroup1.Items[1].OnClick := ItemClick; TGrpButtonItemEx(ButtonGroup1.Items[0]).Enabled := False; end; { TGrpButtonItemEx } constructor TGrpButtonItemEx.Create(Collection: TCollection); begin inherited Create(Collection); Enabled := True; end; procedure TGrpButtonItemEx.SetEnabled(const Value: Boolean); begin FEnabled := Value; end; { TButtonGroup } procedure TButtonGroup.DoItemClicked(const Index: Integer); var ButtonItem: TGrpButtonItem; begin ButtonItem := Items[index]; if Assigned(ButtonItem) and (ButtonItem is TGrpButtonItemEx) then begin if not TGrpButtonItemEx(ButtonItem).Enabled then Exit; end; inherited DoItemClicked(index); end; function TButtonGroup.GetButtonClass: TGrpButtonItemClass; begin Result := TGrpButtonItemEx; end; end.
#8
Escrito 25 octubre 2016 - 04:10
Interesante y elegante tu propuesta amigo Agustín,
Ya había yo pensado en el TActionList, pero tampoco funciona deshabilitando la acción, por eso no lo comenté
Saludos
#9
Escrito 25 octubre 2016 - 04:18
Con el ActionList tambien funciona
#10
Escrito 25 octubre 2016 - 05:03
Con el ActionList funciona a medias, porque no pone el control en modo grisada, y presta a confusión al usuario, haré las pruebas con tus ejemplos amigo.
#11
Escrito 26 octubre 2016 - 08:14
Con el ActionList tambien funciona
Es que lo que se requiere es deshabilitar el botón y el botón sigue activo, a eso me refería cuando digo que no funcionaba
Saludos
#12
Escrito 25 febrero 2021 - 10:27
Hola amigos,
Hoy día, estoy pasando por el mismo problema.
Lo estoy intentando con un Delphi 10.3 Río y supongo que a la gente de Embarcadero no le importa mucho.
Encontraron alguna alternativa?
La idea de encumene de utilizar TFlowPanel con TButtons ¿funciona mejor tal vez?...
Saludo digital para todos!
#13
Escrito 26 febrero 2021 - 08:48
Hola amigos,
Hoy día, estoy pasando por el mismo problema.
Lo estoy intentando con un Delphi 10.3 Río y supongo que a la gente de Embarcadero no le importa mucho.
Encontraron alguna alternativa?
La idea de encumene de utilizar TFlowPanel con TButtons ¿funciona mejor tal vez?...
Saludo digital para todos!
Hola Yako, bienvenido a delphiaccess.
No he visto esto en las nuevas versiones de Delphi, haré unas pruebas.
Saludos