Ir al contenido


Foto

Habilitar/Deshabilitar Items de un TButtonGroup


  • Por favor identifícate para responder
12 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 25 octubre 2016 - 10:19

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


  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.257 mensajes
  • LocationMéxico

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


  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 25 octubre 2016 - 10:48

Ya había probado con:


delphi
  1. TCustomControl(ButtonGroup1.Items.Items[2]).Enabled := False; //Excepción 000000
  2. TButton(").Enabled := False; //Excepción 000000
  3. TWinControl(").Enabled := False; //Excepción 000000


  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.257 mensajes
  • LocationMéxico

Escrito 25 octubre 2016 - 11:17

 

Ya había probado con:


delphi
  1. TCustomControl(ButtonGroup1.Items.Items[2]).Enabled := False; //Excepción 000000
  2. TButton(").Enabled := False; //Excepción 000000
  3. TWinControl(").Enabled := False; //Excepción 000000

 

Vaya, algo no le gustó.

 

Voy a ver que se puede hacer. (y)

 

Saludos


  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

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.


  • 0

#6 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 25 octubre 2016 - 03:40

Lo que podes hacer es usar acciones y manejarte con el Enabled del TAction


  • 1

#7 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

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 :)


delphi
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. System.Classes,
  7. Vcl.Forms,
  8. Vcl.Dialogs,
  9. Vcl.Controls,
  10. Vcl.ButtonGroup;
  11.  
  12. type
  13. TButtonGroup = class(Vcl.ButtonGroup.TButtonGroup)
  14. protected
  15. procedure DoItemClicked(const Index: Integer); override;
  16. function GetButtonClass: TGrpButtonItemClass; override;
  17. end;
  18.  
  19. TGrpButtonItemEx = class(TGrpButtonItem)
  20. private
  21. FEnabled: Boolean;
  22. procedure SetEnabled(const Value: Boolean);
  23. public
  24. constructor Create(Collection: TCollection); override;
  25. property Enabled: Boolean read FEnabled write SetEnabled;
  26. end;
  27.  
  28. TForm1 = class(TForm)
  29. ButtonGroup1: TButtonGroup;
  30. procedure FormCreate(Sender: TObject);
  31. procedure ItemClick(Sender: TObject);
  32. end;
  33.  
  34. var
  35. Form1: TForm1;
  36.  
  37. implementation
  38.  
  39. {$R *.dfm}
  40.  
  41. procedure TForm1.ItemClick(Sender: TObject);
  42. begin
  43. ShowMessage('ItemClick');
  44. end;
  45.  
  46. procedure TForm1.FormCreate(Sender: TObject);
  47. begin
  48. ButtonGroup1.ButtonOptions := [gboFullSize, gboShowCaptions];
  49. ButtonGroup1.Items[0].OnClick := ItemClick;
  50. ButtonGroup1.Items[1].OnClick := ItemClick;
  51. TGrpButtonItemEx(ButtonGroup1.Items[0]).Enabled := False;
  52. end;
  53.  
  54. { TGrpButtonItemEx }
  55.  
  56. constructor TGrpButtonItemEx.Create(Collection: TCollection);
  57. begin
  58. inherited Create(Collection);
  59. Enabled := True;
  60. end;
  61.  
  62. procedure TGrpButtonItemEx.SetEnabled(const Value: Boolean);
  63. begin
  64. FEnabled := Value;
  65. end;
  66.  
  67. { TButtonGroup }
  68.  
  69. procedure TButtonGroup.DoItemClicked(const Index: Integer);
  70. var
  71. ButtonItem: TGrpButtonItem;
  72. begin
  73. ButtonItem := Items[index];
  74. if Assigned(ButtonItem) and (ButtonItem is TGrpButtonItemEx) then
  75. begin
  76. if not TGrpButtonItemEx(ButtonItem).Enabled then Exit;
  77. end;
  78.  
  79. inherited DoItemClicked(index);
  80. end;
  81.  
  82. function TButtonGroup.GetButtonClass: TGrpButtonItemClass;
  83. begin
  84. Result := TGrpButtonItemEx;
  85. end;
  86.  
  87. end.


  • 2

#8 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.257 mensajes
  • LocationMéxico

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é :D

 

Saludos


  • 0

#9 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 25 octubre 2016 - 04:18

Con el ActionList tambien funciona


  • 0

#10 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

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.


  • 0

#11 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.257 mensajes
  • LocationMéxico

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


  • 0

#12 Yako

Yako

    Newbie

  • Miembros
  • Pip
  • 1 mensajes

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!


  • 0

#13 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.257 mensajes
  • LocationMéxico

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


  • 0