1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
unit ceSimpleBrushFrame;
{$mode ObjFPC}{$H+}
interface
uses
Classes, SysUtils, Graphics, Forms, Controls, StdCtrls, Dialogs;
type
{ TSimpleChartBrushFrame }
TSimpleChartBrushFrame = class(TFrame)
cbFillColor: TColorButton;
cbFilled: TCheckBox;
procedure cbFillColorColorChanged(Sender: TObject);
procedure cbFilledChange(Sender: TObject);
private
FBrush: TBrush;
FOnChange: TNotifyEvent;
procedure DoChange;
public
constructor Create(AOwner: TComponent); override;
procedure GetData(ABrush: TBrush);
procedure Prepare(ABrush: TBrush);
property OnChange: TNotifyEvent read FOnChange write FOnChange;
end;
implementation
{$R *.lfm}
constructor TSimpleChartBrushFrame.Create(AOwner: TComponent);
begin
inherited;
cbFillColor.Width := cbFillColor.Height;
end;
procedure TSimpleChartBrushFrame.cbFillColorColorChanged(Sender: TObject);
var
bs: TBrushStyle;
begin
// Be careful: Setting the Brush.Color switches the Style of a transparent brush
// to solid. --> We store the style to reset it and after changing the color.
bs := FBrush.Style;
FBrush.Color := cbFillColor.ButtonColor;
FBrush.Style := bs;
DoChange;
end;
procedure TSimpleChartBrushFrame.cbFilledChange(Sender: TObject);
begin
if cbFilled.Checked then FBrush.Style := bsSolid else FBrush.Style := bsClear;
cbFillColor.Enabled := cbFilled.Checked;
DoChange;
end;
procedure TSimpleChartBrushFrame.DoChange;
begin
if Assigned(FOnChange) then FOnChange(FBrush);
end;
// Transfers the properties of the GUI elements (or the internal brush) to the
// brush provided as parameter.
procedure TSimpleChartBrushFrame.GetData(ABrush: TBrush);
begin
ABrush.Assign(FBrush);
end;
// Applies the brush properties to the GUI elements
procedure TSimpleChartBrushFrame.Prepare(ABrush: TBrush);
begin
FBrush := ABrush;
cbFilled.Checked := ABrush.Style <> bsClear;
if ABrush.Color = clDefault then
cbFillColor.ButtonColor := ColorToRGB(clWindow)
else
cbFillColor.ButtonColor := ColorToRGB(ABrush.Color);
end;
end.
|