FastReport_FMX_2.8.12/Source/FMX.frxEditStyle.pas
2024-07-06 22:41:12 +02:00

327 lines
8.4 KiB
ObjectPascal

{******************************************}
{ }
{ FastReport v4.0 }
{ Style editor }
{ }
{ Copyright (c) 1998-2008 }
{ by Alexander Tzyganenko, }
{ Fast Reports Inc. }
{ }
{******************************************}
unit FMX.frxEditStyle;
interface
{$I frx.inc}
uses
System.SysUtils, System.Classes, System.Types, System.UITypes, FMX.Controls, FMX.Forms, FMX.Dialogs,
FMX.frxClass, FMX.Layouts, FMX.TreeView, FMX.Types, FMX.frxFMX, FMX.Objects,
FMX.Edit, System.UIConsts, FMX.frxFontForm, FMX.frxBaseModalForm
{$IFDEF DELPHI18}
,FMX.StdCtrls
{$ENDIF}
{$IFDEF DELPHI19}
, FMX.Graphics
{$ENDIF}
{$IFDEF DELPHI28}
, FMX.BaseTypeAliases, FMX.FormTypeAliases
{$ENDIF};
type
TfrxStyleEditorForm = class(TfrxForm)
ToolBar: TToolBar;
AddB: TfrxToolButton;
DeleteB: TfrxToolButton;
LoadB: TfrxToolButton;
SaveB: TfrxToolButton;
CancelB: TfrxToolButton;
OkB: TfrxToolButton;
OpenDialog: TOpenDialog;
SaveDialog: TSaveDialog;
EditB: TfrxToolButton;
PaintBox: TPaintBox;
ColorB: TButton;
FontB: TButton;
FrameB: TButton;
StylesTV: TfrxTreeView;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure CancelBClick(Sender: TObject);
procedure OkBClick(Sender: TObject);
procedure PaintBoxPaint(Sender: TObject; Canvas: TCanvas);
procedure FormHide(Sender: TObject);
procedure AddBClick(Sender: TObject);
procedure DeleteBClick(Sender: TObject);
procedure LoadBClick(Sender: TObject);
procedure SaveBClick(Sender: TObject);
procedure BClick(Sender: TObject);
procedure StylesTVClick(Sender: TObject);
procedure StylesTVEdited(Sender: TObject; Node: TfrxTreeViewItem; var S: String);
procedure EditBClick(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: WideChar; Shift: TShiftState);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
FReport: TfrxReport;
FStyles: TfrxStyles;
procedure UpdateStyles(Focus: Integer = 0);
procedure UpdateControls;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
implementation
{$R *.FMX}
uses FMX.frxDesgn, FMX.frxEditFrame, FMX.frxDesgnCtrls, FMX.frxRes;
constructor TfrxStyleEditorForm.Create(AOwner: TComponent);
begin
inherited;
FStyles := TfrxStyles.Create(nil);
{$IFDEF LINUX}
BorderStyleSizeable(Self);
{$ENDIF}
end;
destructor TfrxStyleEditorForm.Destroy;
begin
FStyles.Free;
inherited;
end;
procedure TfrxStyleEditorForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
FormHide(Self);
end;
procedure TfrxStyleEditorForm.FormCreate(Sender: TObject);
begin
Caption := frxGet(5100);
ColorB.Text := frxGet(5101);
FontB.Text := frxGet(5102);
FrameB.Text := frxGet(5103);
AddB.Hint := frxGet(5104);
DeleteB.Hint := frxGet(5105);
EditB.Hint := frxGet(5106);
LoadB.Hint := frxGet(5107);
SaveB.Hint := frxGet(5108);
CancelB.Hint := frxGet(2);
OkB.Hint := frxGet(1);
StylesTV.Editable := True;
StylesTV.OnEdited := StylesTVEdited;
FReport := TfrxCustomDesigner(Owner).Report;
frxResources.LoadImageFromResouce(AddB.Bitmap, 8, 7);
frxResources.LoadImageFromResouce(DeleteB.Bitmap, 5, 1);
frxResources.LoadImageFromResouce(EditB.Bitmap, 10, 5);
frxResources.LoadImageFromResouce(LoadB.Bitmap, 0, 1);
frxResources.LoadImageFromResouce(SaveB.Bitmap, 0, 2);
frxResources.LoadImageFromResouce(CancelB.Bitmap, 21, 2);
frxResources.LoadImageFromResouce(OkB.Bitmap, 21, 0);
end;
procedure TfrxStyleEditorForm.FormShow(Sender: TObject);
begin
FStyles.Assign(FReport.Styles);
UpdateStyles;
end;
procedure TfrxStyleEditorForm.FormHide(Sender: TObject);
begin
if ModalResult = mrOk then
FReport.Styles.Assign(FStyles);
end;
procedure TfrxStyleEditorForm.UpdateStyles(Focus: Integer = 0);
var
i: Integer;
Node: TfrxTreeViewItem;
begin
StylesTV.BeginUpdate;
StylesTV.Clear;
for i := 0 to FStyles.Count - 1 do
begin
Node := StylesTV.AddItem(StylesTV, FStyles[i].Name);
Node.TagObject := FStyles[i];
end;
StylesTV.EndUpdate;
if Focus >= StylesTV.Count then
Focus := StylesTV.Count - 1;
if Focus <> -1 then
StylesTV.Selected := StylesTV.Items[Focus];
StylesTVClick(nil);
end;
procedure TfrxStyleEditorForm.UpdateControls;
var
b: Boolean;
begin
b := StylesTV.Selected <> nil;
ColorB.Enabled := b;
FontB.Enabled := b;
FrameB.Enabled := b;
end;
procedure TfrxStyleEditorForm.PaintBoxPaint(Sender: TObject; Canvas: TCanvas);
var
m: TfrxMemoView;
begin
with PaintBox.Canvas do
begin
Fill.Color := claWhite;
Stroke.Color := claGray;
{$IFDEF Delphi25}
Stroke.Thickness := 1;
{$ELSE}
StrokeThickness := 1;
{$ENDIF}
Stroke.Kind := TBrushKind.bkSolid;
DrawRect(RectF(0, 0, PaintBox.Width, PaintBox.Height), 1, 1, AllCorners, 1, TCornerType.ctBevel);
end;
if StylesTV.Selected = nil then Exit;
m := TfrxMemoView.Create(nil);
m.ApplyStyle(TfrxStyleItem(StylesTV.Selected.TagObject));
m.Text := frxResources.Get('dsStyleSample');
m.GapX := 20;
m.GapY := 10;
m.Width := m.CalcWidth;
m.Height := m.CalcHeight;
m.Left := (PaintBox.Width - m.Width) / 2;
m.Top := (PaintBox.Height - m.Height) / 2;
m.Draw(PaintBox.Canvas, 1, 1, 0, 0);
m.Free;
end;
procedure TfrxStyleEditorForm.StylesTVClick(Sender: TObject);
begin
UpdateControls;
//PaintBoxPaint(nil, PaintBox.Canvas);
Self.InvalidateRect(RectF(0, 0, Self.Width, Self.Height));
end;
procedure TfrxStyleEditorForm.BClick(Sender: TObject);
var
Style: TfrxStyleItem;
begin
if StylesTV.Selected = nil then Exit;
Style := TfrxStyleItem(StylesTV.Selected.TagObject);
case TControl(Sender).Tag of
2:
with TfrxColorSelector.Create(TComponent(Sender)) do
begin
OnColorChanged := BClick;
//Color := AColor;
BtnCaption := frxResources.Get('dsColorOth');
Popup(ColorB);
Tag := 20;
end;
20:
Style.Color := TfrxColorSelector(Sender).Color;
3:
with TfrxFontForm.Create(Application) do
begin
FontS.Assign(Style.Font);
FormActivate(Sender);
if ShowModal = mrOk then
Style.Font.Assign(FontS);
Free;
end;
4:
with TfrxFrameEditorForm.Create(Owner) do
begin
Frame.Assign(Style.Frame);
if ShowModal = mrOk then
Style.Frame := Frame;
Free;
end;
end;
Self.InvalidateRect(RectF(0, 0, Self.Width, Self.Height));
//PaintBoxPaint(nil, PaintBox.Canvas);
end;
procedure TfrxStyleEditorForm.AddBClick(Sender: TObject);
begin
FStyles.Add.CreateUniqueName;
UpdateStyles(FStyles.Count - 1);
StylesTV.DoEdit;
end;
procedure TfrxStyleEditorForm.DeleteBClick(Sender: TObject);
begin
if StylesTV.Selected = nil then Exit;
TfrxStyleItem(StylesTV.Selected.TagObject).Free;
UpdateStyles(StylesTV.Selected.Index);
end;
procedure TfrxStyleEditorForm.LoadBClick(Sender: TObject);
begin
OpenDialog.Filter := frxResources.Get('dsStyleFile') + ' (*.fs3)|*.fs3';
if frxDesignerComp <> nil then
OpenDialog.InitialDir := frxDesignerComp.OpenDir;
if OpenDialog.Execute then
begin
FStyles.LoadFromFile(OpenDialog.FileName);
UpdateStyles;
end;
PeekLastModalResult;
end;
procedure TfrxStyleEditorForm.SaveBClick(Sender: TObject);
begin
SaveDialog.Filter := frxResources.Get('dsStyleFile') + ' (*.fs3)|*.fs3';
if frxDesignerComp <> nil then
SaveDialog.InitialDir := frxDesignerComp.SaveDir;
if SaveDialog.Execute then
FStyles.SaveToFile(ChangeFileExt(SaveDialog.FileName, '.fs3'));
PeekLastModalResult;
end;
procedure TfrxStyleEditorForm.CancelBClick(Sender: TObject);
begin
ModalResult := mrCancel;
end;
procedure TfrxStyleEditorForm.OkBClick(Sender: TObject);
begin
ModalResult := mrOk;
end;
procedure TfrxStyleEditorForm.StylesTVEdited(Sender: TObject; Node: TfrxTreeViewItem; var S: String);
var
Style: TfrxStyleItem;
begin
Style := TfrxStyleItem(Node.TagObject);
Style.Name := s;
end;
procedure TfrxStyleEditorForm.EditBClick(Sender: TObject);
begin
if StylesTV.Selected = nil then Exit;
StylesTV.DoEdit;
end;
procedure TfrxStyleEditorForm.FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: WideChar; Shift: TShiftState);
begin
if Key = VKF1 then
frxResources.Help(Self);
if Key = VKF2 then
EditBClick(nil);
end;
end.