Ciao a tutti,
avrei bisogno di creare un nuovo componente che funga da checkbox, ne ho bisogno uno personalizzato perche mi serve piu grande e con grafica diversa.
pensavo di ereditarlo da una timage ed assegnargli quindi una immagine per il true e una per il false,
ma quando piazzo il componente nella form, a parte che sembra che si refresha in continuazione , ma non riesco ad assegnargli le immagini, mi rimane sempre aperta la finestra di assegnazione,
questo è il codice, se qualche anima pia riesce a darmi una dritta glele sono grato:
unit mycheckbox;
interface
uses
System.Classes, Vcl.Controls, Vcl.ExtCtrls, Vcl.Graphics;
type
Tmycheckbox = class(TImage)
private
FChecked: Boolean;
FCheckedImage: TBitmap;
FUncheckedImage: TBitmap;
procedure SetChecked(Value: Boolean);
procedure SetCheckedImage(Value: TBitmap);
procedure SetUncheckedImage(Value: TBitmap);
procedure ToggleChecked;
protected
procedure Click; override;
procedure Paint; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Checked: Boolean read FChecked write SetChecked default False;
property CheckedImage: TBitmap read FCheckedImage write SetCheckedImage;
property UncheckedImage: TBitmap read FUncheckedImage write SetUncheckedImage;
end;
procedure Register;
implementation
constructor Tmycheckbox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Width := 40;
Height := 40;
FCheckedImage := TBitmap.Create;
FUncheckedImage := TBitmap.Create;
end;
destructor Tmycheckbox.Destroy;
begin
FCheckedImage.Free;
FUncheckedImage.Free;
inherited Destroy;
end;
procedure Tmycheckbox.SetChecked(Value: Boolean);
begin
if FChecked <> Value then
begin
FChecked := Value;
Invalidate;
end;
end;
procedure Tmycheckbox.SetCheckedImage(Value: TBitmap);
begin
FCheckedImage.Assign(Value);
Invalidate;
end;
procedure Tmycheckbox.SetUncheckedImage(Value: TBitmap);
begin
FUncheckedImage.Assign(Value);
Invalidate;
end;
procedure Tmycheckbox.ToggleChecked;
begin
Checked := not Checked;
end;
procedure Tmycheckbox.Click;
begin
inherited Click;
ToggleChecked;
end;
procedure Tmycheckbox.Paint;
var
Image: TBitmap;
begin
inherited Paint;
if Checked then
Image := FCheckedImage
else
Image := FUncheckedImage;
if (Width > 0) and (Height > 0) then
Canvas.StretchDraw(Rect(0, 0, Width, Height), Image);
end;
procedure Register;
begin
RegisterComponents('mycomps', [Tmycheckbox]);
end;
end.