FastReport_2022_VCL/LibD28/frxEditFill.pas
2024-01-01 16:13:08 +01:00

379 lines
11 KiB
ObjectPascal

{******************************************}
{ }
{ FastReport VCL }
{ Fill editor }
{ }
{ Copyright (c) 1998-2021 }
{ by Fast Reports Inc. }
{ }
{******************************************}
unit frxEditFill;
interface
{$I frx.inc}
uses
{$IFDEF FPC}
LCLType, LMessages, LazHelper, LCLIntf,
{$ELSE}
Windows, Messages,
{$ENDIF}
SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls, frxClass, frxDesgnCtrls, frxBaseForm
{$IFDEF Delphi6}
, Variants
{$ENDIF}
;
type
TfrxFillEditorForm = class(TfrxBaseForm)
PageControl: TPageControl;
BrushTS: TTabSheet;
GradientTS: TTabSheet;
GlassTS: TTabSheet;
BrushBackColorL: TLabel;
BrushForeColorL: TLabel;
BrushStyleL: TLabel;
BrushStyleCB: TComboBox;
GradientStyleL: TLabel;
GradientStyleCB: TComboBox;
GradientStartColorL: TLabel;
GradientEndColorL: TLabel;
GlassOrientationL: TLabel;
GlassOrientationCB: TComboBox;
GlassColorL: TLabel;
GlassBlendL: TLabel;
GlassHatchCB: TCheckBox;
OKB: TButton;
CancelB: TButton;
SampleP: TPanel;
GlassBlendE: TEdit;
PaintBox1: TPaintBox;
procedure FormCreate(Sender: TObject);
procedure PaintBox1Paint(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure BrushStyleCBDrawItem(Control: TWinControl; Index: Integer;
ARect: TRect; State: TOwnerDrawState);
procedure PageControlChange(Sender: TObject);
procedure BrushStyleCBChange(Sender: TObject);
procedure GradientStyleCBChange(Sender: TObject);
procedure GlassOrientationCBChange(Sender: TObject);
procedure GlassHatchCBClick(Sender: TObject);
procedure GlassBlendEExit(Sender: TObject);
private
{ Private declarations }
FBrushFill: TfrxBrushFill;
FGradientFill: TfrxGradientFill;
FGlassFill: TfrxGlassFill;
FIsSimpleFill: Boolean;
BrushBackColorCB: TfrxColorComboBox;
BrushForeColorCB: TfrxColorComboBox;
GradientStartColorCB: TfrxColorComboBox;
GradientEndColorCB: TfrxColorComboBox;
GlassColorCB: TfrxColorComboBox;
function GetFill: TfrxCustomFill;
procedure SetFill(Value: TfrxCustomFill);
procedure SetIsSimpleFill(Value: Boolean);
procedure UpdateControls;
procedure Change;
procedure BrushBackColorChanged(Sender: TObject);
procedure BrushForeColorChanged(Sender: TObject);
procedure GradientStartColorChanged(Sender: TObject);
procedure GradientEndColorChanged(Sender: TObject);
procedure GlassColorChanged(Sender: TObject);
public
{ Public declarations }
procedure UpdateResouces; override;
property Fill: TfrxCustomFill read GetFill write SetFill;
property IsSimpleFill: Boolean read FIsSimpleFill write SetIsSimpleFill;
end;
implementation
{$IFDEF FPC}
{$R *.lfm}
{$ELSE}
{$R *.dfm}
{$ENDIF}
uses frxUtils, frxRes;
procedure TfrxFillEditorForm.FormCreate(Sender: TObject);
begin
FBrushFill := TfrxBrushFill.Create;
BrushBackColorCB := TfrxColorComboBox.Create(Self);
BrushBackColorCB.Parent := BrushTS;
BrushBackColorCB.SetBounds(BrushStyleCB.Left, BrushBackColorL.Top - 3, BrushStyleCB.Width, BrushStyleCB.Height);
BrushBackColorCB.ShowColorName := True;
BrushBackColorCB.OnColorChanged := BrushBackColorChanged;
BrushForeColorCB := TfrxColorComboBox.Create(Self);
BrushForeColorCB.Parent := BrushTS;
BrushForeColorCB.SetBounds(BrushStyleCB.Left, BrushForeColorL.Top - 3, BrushStyleCB.Width, BrushStyleCB.Height);
BrushForeColorCB.ShowColorName := True;
BrushForeColorCB.OnColorChanged := BrushForeColorChanged;
FGradientFill := TfrxGradientFill.Create;
GradientStartColorCB := TfrxColorComboBox.Create(Self);
GradientStartColorCB.Parent := GradientTS;
GradientStartColorCB.SetBounds(BrushStyleCB.Left, GradientStartColorL.Top - 3, BrushStyleCB.Width, BrushStyleCB.Height);
GradientStartColorCB.ShowColorName := True;
GradientStartColorCB.OnColorChanged := GradientStartColorChanged;
GradientEndColorCB := TfrxColorComboBox.Create(Self);
GradientEndColorCB.Parent := GradientTS;
GradientEndColorCB.SetBounds(BrushStyleCB.Left, GradientEndColorL.Top - 3, BrushStyleCB.Width, BrushStyleCB.Height);
GradientEndColorCB.ShowColorName := True;
GradientEndColorCB.OnColorChanged := GradientEndColorChanged;
FGlassFill := TfrxGlassFill.Create;
GlassColorCB := TfrxColorComboBox.Create(Self);
GlassColorCB.Parent := GlassTS;
GlassColorCB.SetBounds(BrushStyleCB.Left, GlassColorL.Top - 3, BrushStyleCB.Width, BrushStyleCB.Height);
GlassColorCB.ShowColorName := True;
GlassColorCB.OnColorChanged := GlassColorChanged;
end;
procedure TfrxFillEditorForm.FormDestroy(Sender: TObject);
begin
FBrushFill.Free;
FGradientFill.Free;
FGlassFill.Free;
end;
function TfrxFillEditorForm.GetFill: TfrxCustomFill;
begin
Result := nil;
if PageControl.ActivePage = BrushTS then
Result := FBrushFill
else if PageControl.ActivePage = GradientTS then
Result := FGradientFill
else if PageControl.ActivePage = GlassTS then
Result := FGlassFill;
end;
procedure TfrxFillEditorForm.SetFill(Value: TfrxCustomFill);
begin
if Value is TfrxBrushFill then
begin
FBrushFill.Assign(Value);
PageControl.ActivePage := BrushTS;
end
else if Value is TfrxGradientFill then
begin
FGradientFill.Assign(Value);
PageControl.ActivePage := GradientTS;
end
else if Value is TfrxGlassFill then
begin
FGlassFill.Assign(Value);
PageControl.ActivePage := GlassTS;
end;
UpdateControls;
end;
procedure TfrxFillEditorForm.SetIsSimpleFill(Value: Boolean);
begin
FIsSimpleFill := Value;
if Value then
begin
GradientTS.TabVisible := False;
GlassTS.TabVisible := False;
end;
end;
procedure TfrxFillEditorForm.UpdateControls;
begin
BrushStyleCB.ItemIndex := Ord(FBrushFill.Style);
BrushBackColorCB.Color := FBrushFill.BackColor;
BrushForeColorCB.Color := FBrushFill.ForeColor;
GradientStyleCB.ItemIndex := Ord(FGradientFill.GradientStyle);
GradientStartColorCB.Color := FGradientFill.StartColor;
GradientEndColorCB.Color := FGradientFill.EndColor;
GlassOrientationCB.ItemIndex := Ord(FGlassFill.Orientation);
GlassColorCB.Color := FGlassFill.Color;
GlassBlendE.Text := FloatToStr(FGlassFill.Blend);
GlassHatchCB.Checked := FGlassFill.Hatch;
end;
procedure TfrxFillEditorForm.UpdateResouces;
begin
inherited;
with BrushStyleCB.Items do
begin
BeginUpdate;
Clear;
Add(frxResources.Get('bsSolid'));
Add(frxResources.Get('bsClear'));
Add(frxResources.Get('bsHorizontal'));
Add(frxResources.Get('bsVertical'));
Add(frxResources.Get('bsFDiagonal'));
Add(frxResources.Get('bsBDiagonal'));
Add(frxResources.Get('bsCross'));
Add(frxResources.Get('bsDiagCross'));
EndUpdate;
end;
with GradientStyleCB.Items do
begin
BeginUpdate;
Clear;
Add(frxResources.Get('gsHorizontal'));
Add(frxResources.Get('gsVertical'));
Add(frxResources.Get('gsElliptic'));
Add(frxResources.Get('gsRectangle'));
Add(frxResources.Get('gsVertCenter'));
Add(frxResources.Get('gsHorizCenter'));
EndUpdate;
end;
with GlassOrientationCB.Items do
begin
BeginUpdate;
Clear;
Add(frxResources.Get('foVertical'));
Add(frxResources.Get('foHorizontal'));
Add(frxResources.Get('foVerticalMirror'));
Add(frxResources.Get('foHorizontalMirror'));
EndUpdate;
end;
Caption := frxGet(6100);
BrushTS.Caption := frxGet(6101);
GradientTS.Caption := frxGet(6102);
GlassTS.Caption := frxGet(6103);
BrushStyleL.Caption := frxGet(6104);
BrushBackColorL.Caption := frxGet(6105);
BrushForeColorL.Caption := frxGet(6106);
GradientStyleL.Caption := frxGet(6107);
GradientStartColorL.Caption := frxGet(6108);
GradientEndColorL.Caption := frxGet(6109);
GlassOrientationL.Caption := frxGet(6110);
GlassColorL.Caption := frxGet(6111);
GlassBlendL.Caption := frxGet(6112);
GlassHatchCB.Caption := frxGet(6113);
OKB.Caption := frxGet(1);
CancelB.Caption := frxGet(2);
end;
procedure TfrxFillEditorForm.Change;
begin
PaintBox1.Repaint;
end;
procedure TfrxFillEditorForm.PaintBox1Paint(Sender: TObject);
begin
with PaintBox1.Canvas do
begin
Brush.Color := clWhite;
Brush.Style := bsSolid;
FillRect(PaintBox1.ClientRect);
GetFill.Draw(PaintBox1.Canvas, 0, 0, PaintBox1.Width, PaintBox1.Height, 1, 1);
Pen.Color := clBtnShadow;
Brush.Style := bsClear;
Rectangle(0, 0, PaintBox1.Width, PaintBox1.Height);
end;
end;
procedure TfrxFillEditorForm.BrushStyleCBDrawItem(Control: TWinControl; Index: Integer;
ARect: TRect; State: TOwnerDrawState);
var
r: TRect;
begin
with BrushStyleCB.Canvas do
begin
FillRect(ARect);
Brush.Color := clWhite;
Brush.Style := bsSolid;
r := Rect(ARect.Left + 1, ARect.Top + 2, ARect.Left + 21, ARect.Bottom - 2);
FillRect(r);
Brush.Style := TBrushStyle(Index);
if Index = 1 then
Brush.Color := clWhite
else
Brush.Color := clBlack;
Pen.Color := clBtnShadow;
Rectangle(r.Left, r.Top, r.Right, r.Bottom);
Font := BrushStyleCB.Font;
Brush.Color := clWhite;
Brush.Style := bsClear;
TextOut(r.Right + 4, r.Top, BrushStyleCB.Items[Index]);
end;
end;
procedure TfrxFillEditorForm.PageControlChange(Sender: TObject);
begin
Change;
end;
procedure TfrxFillEditorForm.BrushStyleCBChange(Sender: TObject);
begin
FBrushFill.Style := TBrushStyle(BrushStyleCB.ItemIndex);
Change;
end;
procedure TfrxFillEditorForm.BrushBackColorChanged(Sender: TObject);
begin
FBrushFill.BackColor := BrushBackColorCB.Color;
Change;
end;
procedure TfrxFillEditorForm.BrushForeColorChanged(Sender: TObject);
begin
FBrushFill.ForeColor := BrushForeColorCB.Color;
Change;
end;
procedure TfrxFillEditorForm.GradientStyleCBChange(Sender: TObject);
begin
FGradientFill.GradientStyle := TfrxGradientStyle(GradientStyleCB.ItemIndex);
Change;
end;
procedure TfrxFillEditorForm.GradientStartColorChanged(Sender: TObject);
begin
FGradientFill.StartColor := GradientStartColorCB.Color;
Change;
end;
procedure TfrxFillEditorForm.GradientEndColorChanged(Sender: TObject);
begin
FGradientFill.EndColor := GradientEndColorCB.Color;
Change;
end;
procedure TfrxFillEditorForm.GlassOrientationCBChange(Sender: TObject);
begin
FGlassFill.Orientation := TfrxGlassFillOrientation(GlassOrientationCB.ItemIndex);
Change;
end;
procedure TfrxFillEditorForm.GlassColorChanged(Sender: TObject);
begin
FGlassFill.Color := GlassColorCB.Color;
Change;
end;
procedure TfrxFillEditorForm.GlassBlendEExit(Sender: TObject);
begin
FGlassFill.Blend := frxStrToFloat(GlassBlendE.Text);
Change;
end;
procedure TfrxFillEditorForm.GlassHatchCBClick(Sender: TObject);
begin
FGlassFill.Hatch := GlassHatchCb.Checked;
Change;
end;
end.