Ver Mensaje Individual
  #2  
Antiguo 08-11-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Aca se hablo de ese tema

Aunque el codigo que publique cumple su cometido, lo que resta por implementar es el comportamiento visual (no permitir clickear el boton, sombrearlo o algo para se note que esta desactivado, mouseover, entre otros)

Código Delphi [-]
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.

Lo mas sencillo es utilizar TActionList y conectar los botones con los respectivos Actions. Luego, te manejas con las propiedad TAction.Enabled. Aunque esta solucion tiene la misma "pega" que la anterior, visualmente los botones parecen activos, pero es mucho mas sencilla de implementar
Responder Con Cita