unit Unit_But_Panel;
interface
Uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, System.Types, Vcl.Controls, Vcl.Forms,
Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TButtonsEvent = procedure(Sender: TObject; LoadButton: Boolean) of object;
TButPanel = class(TCustomPanel)
Private
FSavebut: TButton;
FLoadbut: TButton;
FOnButtsClick: TButtonsEvent;
protected
Procedure GetButClicks(Sender: TObject);
Function GetButSave: Boolean;
Procedure SetButSave(Value: Boolean);
Public
Constructor Create(AOwner: TComponent); override;
Destructor Destroy; override;
procedure SetBounds(ALeft: Integer; ATop: Integer; AWidth: Integer; AHeight: Integer); reintroduce;
property SaveButVisable: Boolean read GetButSave write SetButSave;
Published
property OnButtsClick: TButtonsEvent read FOnButtsClick write FOnButtsClick;
end;
implementation
{ ButPanel }
constructor TButPanel.Create(AOwner: TComponent);
begin
inherited;
FSavebut := TButton.Create(Self);
FSavebut.Parent := Self;
FLoadbut := TButton.Create(Self);
FLoadbut.Parent := Self;
BevelOuter := bvNone;
AutoSize := True;
FLoadbut.Align := alLeft;
FSavebut.Align := alClient;
FLoadbut.Caption := 'Load';
FSavebut.Caption := 'Save';
FLoadbut.OnClick := GetButClicks;
FSavebut.OnClick := GetButClicks;
end;
destructor TButPanel.Destroy;
begin
FSavebut.Free;
FLoadbut.Free;
inherited;
end;
procedure TButPanel.GetButClicks(Sender: TObject);
begin
If TButton(Sender) = FLoadbut then
FOnButtsClick(Self, True) else FOnButtsClick(Self, False);
end;
procedure TButPanel.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
begin
FLoadbut.Width := AWidth div 2;
Inherited SetBounds(ALeft, ATop, AWidth, AHeight);
end;
function TButPanel.GetButSave: Boolean;
begin
result := FSavebut.Visible;
end;
procedure TButPanel.SetButSave(Value: Boolean);
begin
FSavebut.Visible := Value;
FSavebut.BringToFront;
Paint;
end;
end.
and running it in this form
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Unit_But_Panel, Vcl.StdCtrls,
Vcl.ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
CheckLoad: TCheckBox;
CheckSave: TCheckBox;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
procedure ButClick(Sender: TObject; LoadButton: Boolean);
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
ButPanel: TButPanel;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
ButPanel.SaveButVisable := not ButPanel.SaveButVisable;
If ButPanel.SaveButVisable then Button1.Caption := 'Vis'
else Button1.Caption := 'gone';
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ButPanel := TButPanel.Create(Self);
ButPanel.Parent := Self;
ButPanel.Left := 100;
ButPanel.Top := 100;
ButPanel.Height := 20;
//ButPanel.Left := 100;
ButPanel.OnButtsClick := ButClick;
ButPanel.SetBounds(100, 100, 120, 30);
// ButPanel.SetBounds(ALeft: Integer: ATop: Integer; AWidth: Integer; AHeight: Integer)
end;
procedure TForm1.ButClick(Sender: TObject; LoadButton: Boolean);
begin
If LoadButton then CheckSave.Checked := Not CheckSave.Checked
else CheckLoad.Checked := Not CheckLoad.Checked;
end;
end.
my problem is procedure TButPanel.SetButSave(Value: Boolean);
I use invalidate but the Button does not reappear???
why?