📄 fr_color.pas
字号:
{******************************************}
{ }
{ FastReport v2.4 }
{ Color selector }
{ }
{ Copyright (c) 1998-2001 by Tzyganenko A. }
{ }
{******************************************}
unit FR_Color;
interface
{$I FR.inc}
uses
SysUtils, Windows, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, FR_Ctrls, FR_Const;
type
TColorSelector = class(TPanel)
private
FColor: TColor;
FOtherBtn: TfrSpeedButton;
FOnColorSelected: TNotifyEvent;
procedure ButtonClick(Sender: TObject);
procedure SetColor(Value: TColor);
public
constructor Create(AOwner: TComponent); override;
property Color: TColor read FColor write SetColor;
property OnColorSelected: TNotifyEvent read FOnColorSelected write
FOnColorSelected;
end;
implementation
uses FR_Class, FR_Utils;
constructor TColorSelector.Create(AOwner: TComponent);
var
b: TfrSpeedButton;
i,j: Integer;
bmp: TBitmap;
begin
inherited Create(AOwner);
Parent := AOwner as TWinControl;
Width := 96; Height := 132;
bmp := TBitmap.Create;
bmp.Width := 16; bmp.Height := 17;
with bmp.Canvas do
begin
Brush.Color := clBtnFace;
FillRect(Rect(0, 0, 16, 17));
end;
for i := 0 to 3 do
for j := 0 to 3 do
begin
b := TfrSpeedButton.Create(Self);
b.Parent := Self;
b.SetBounds(j * 22 + 4, i * 22 + 4, 22, 22);
with bmp.Canvas do
begin
Brush.Color := frColors[i * 4 + j];
Pen.Color := clBtnShadow;
Rectangle(0, 0, 16, 16);
end;
b.Glyph.Assign(bmp);
b.Tag := i * 4 + j;
b.OnClick := ButtonClick;
b.GroupIndex := 1;
b.Flat := True;
b.GrayedInactive := False;
end;
b := TfrSpeedButton.Create(Self);
with b do
begin
Parent := Self;
SetBounds(4, 92, 88, 18);
Tag := 16;
Caption := frLoadStr(STransparent);
OnClick := ButtonClick;
GroupIndex := 1;
Flat := True;
GrayedInactive := False;
end;
FOtherBtn := TfrSpeedButton.Create(Self);
with FOtherBtn do
begin
Parent := Self;
SetBounds(4, 110, 88, 18);
Tag := 17;
Caption := frLoadStr(SOther);
OnClick := ButtonClick;
GroupIndex := 1;
Flat := True;
GrayedInactive := False;
end;
bmp.Free;
end;
procedure TColorSelector.ButtonClick(Sender: TObject);
var
cd: TColorDialog;
i: Integer;
begin
i := (Sender as TfrSpeedButton).Tag;
case i of
0..15: FColor := frColors[i];
16: FColor := clNone;
17:
begin
Hide;
cd := TColorDialog.Create(Self);
cd.Options := [cdFullOpen];
cd.Color := FColor;
if cd.Execute then
FColor := cd.Color else
Exit;
end;
end;
Hide;
if Assigned(FOnColorSelected) then FOnColorSelected(Self);
end;
procedure TColorSelector.SetColor(Value: TColor);
var
i,j: Integer;
c: TfrSpeedButton;
bmp: TBitmap;
begin
for i := 0 to 16 do
if ((i = 16) and (Value = clNone)) or (frColors[i] = Value) then
begin
for j := 0 to ControlCount-1 do
begin
c := Controls[j] as TfrSpeedButton;
if c.Tag = i then
begin
c.Down := True;
FOtherBtn.Glyph.Assign(nil);
break;
end;
end;
Exit;
end;
bmp := TBitmap.Create;
bmp.Width := 12; bmp.Height := 13;
with bmp.Canvas do
begin
Brush.Color := clBtnFace;
FillRect(Rect(0, 0, 12, 13));
Brush.Color := Value;
Pen.Color := clBtnShadow;
Rectangle(0, 0, 12, 12);
end;
FOtherBtn.Glyph.Assign(bmp);
bmp.Free;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -