FastReport_2022_VCL/Source/frxEditSysMemo.pas
2024-01-01 16:13:08 +01:00

317 lines
7.2 KiB
ObjectPascal

{******************************************}
{ }
{ FastReport VCL }
{ SysMemo editor }
{ }
{ Copyright (c) 1998-2021 }
{ by Fast Reports Inc. }
{ }
{******************************************}
unit frxEditSysMemo;
interface
{$I frx.inc}
uses
{$IFNDEF FPC}
Windows, Messages,
{$ENDIF}
SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, frxClass, frxCtrls, frxBaseForm
{$IFDEF FPC}
, LResources, LCLType
{$ENDIF}
{$IFDEF Delphi6}
, Variants
{$ENDIF};
type
TfrxSysMemoEditorForm = class(TfrxBaseForm)
OKB: TButton;
CancelB: TButton;
AggregateRB: TRadioButton;
SysVariableRB: TRadioButton;
TextRB: TRadioButton;
AggregatePanel: TGroupBox;
DataBandL: TLabel;
DataSetL: TLabel;
DataFieldL: TLabel;
FunctionL: TLabel;
ExpressionL: TLabel;
DataFieldCB: TComboBox;
DataSetCB: TComboBox;
DataBandCB: TComboBox;
CountInvisibleCB: TCheckBox;
FunctionCB: TComboBox;
ExpressionE: TfrxComboEdit;
RunningTotalCB: TCheckBox;
GroupBox1: TGroupBox;
SysVariableCB: TComboBox;
GroupBox2: TGroupBox;
TextE: TEdit;
SampleL: TLabel;
procedure ExpressionEButtonClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormHide(Sender: TObject);
procedure DataSetCBChange(Sender: TObject);
procedure DataBandCBChange(Sender: TObject);
procedure DataFieldCBChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FunctionCBChange(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
FAggregateOnly: Boolean;
FReport: TfrxReport;
FText: String;
procedure FillDataBandCB;
procedure FillDataFieldCB;
procedure FillDataSetCB;
function CreateAggregate: String;
procedure UpdateSample;
public
procedure UpdateResouces; override;
property AggregateOnly: Boolean read FAggregateOnly write FAggregateOnly;
property Text: String read FText write FText;
end;
implementation
{$IFNDEF FPC}
{$R *.DFM}
{$ELSE}
{$R *.lfm}
{$ENDIF}
uses frxUtils, frxRes;
procedure TfrxSysMemoEditorForm.FormShow(Sender: TObject);
var
s: String;
procedure HideControls(ar: array of TControl);
var
i: Integer;
begin
for i := 0 to High(ar) do
ar[i].Hide;
end;
begin
FReport := TfrxCustomDesigner(Owner).Report;
FillDataBandCB;
FillDataSetCB;
s := FText;
if s <> '' then
{$IFDEF FPC}
{$IFDEF UNIX}
SetLength(s, Length(s) - 1); { cut #13#10 }
{$ELSE}
SetLength(s, Length(s) - 2); { cut #13#10 }
{$ENDIF}
{$ELSE}
SetLength(s, Length(s) - 2); { cut #13#10 }
{$ENDIF}
if FAggregateOnly then
begin
Caption := frxResources.Get('agAggregate');
AggregateRB.Checked := True;
HideControls([SysVariableRB, AggregateRB, TextRB, SysVariableCB, TextE,
GroupBox1, GroupBox2]);
AggregatePanel.Top := 4;
OkB.Top := AggregatePanel.Height + 18;
CancelB.Top := OkB.Top;
ClientHeight := CancelB.Top + 33;
end
else if (SysVariableCB.Items.IndexOf(s) <> -1) or (s = '') then
begin
SysVariableRB.Checked := True;
SysVariableCB.Text := s;
end
else
begin
TextRB.Checked := True;
TextE.Text := s;
TextE.SetFocus;
end;
UpdateSample;
end;
procedure TfrxSysMemoEditorForm.FormHide(Sender: TObject);
begin
if ModalResult = mrOk then
begin
if SysVariableRB.Checked then
FText := SysVariableCB.Text
else if AggregateRB.Checked then
FText := '[' + CreateAggregate + ']'
else
FText := TextE.Text
end;
end;
function TfrxSysMemoEditorForm.CreateAggregate: String;
var
s: String;
i: Integer;
begin
s := FunctionCB.Text;
i := 0;
if CountInvisibleCB.Checked then
i := i or 1;
if RunningTotalCB.Checked then
i := i or 2;
if s <> 'COUNT' then
begin
s := s + '(';
if ExpressionE.Text <> '' then
s := s + ExpressionE.Text else
s := s + '<' + DataSetCB.Text + '."' + DataFieldCB.Text + '">';
if DataBandCB.Text <> '' then
begin
s := s + ',' + DataBandCB.Text;
if i <> 0 then
s := s + ',' + IntToStr(i);
end;
s := s + ')';
end
else
begin
s := s + '(';
s := s + DataBandCB.Text;
if i <> 0 then
s := s + ',' + IntToStr(i);
s := s + ')';
end;
Result := s;
end;
procedure TfrxSysMemoEditorForm.FillDataBandCB;
var
i: Integer;
c: TfrxComponent;
begin
DataBandCB.Items.Clear;
for i := 0 to FReport.Designer.Objects.Count - 1 do
begin
c := TfrxComponent(FReport.Designer.Objects[i]);
if c is TfrxDataBand then
DataBandCB.Items.Add(c.Name);
end;
end;
procedure TfrxSysMemoEditorForm.FillDataSetCB;
begin
FReport.GetDataSetList(DataSetCB.Items);
end;
procedure TfrxSysMemoEditorForm.FillDataFieldCB;
var
ds: TfrxDataSet;
begin
ds := FReport.GetDataSet(DataSetCB.Text);
if ds <> nil then
ds.GetFieldList(DataFieldCB.Items) else
DataFieldCB.Items.Clear;
end;
procedure TfrxSysMemoEditorForm.DataBandCBChange(Sender: TObject);
var
b: TfrxDataBand;
begin
b := FReport.Designer.Page.FindObject(DataBandCB.Text) as TfrxDataBand;
if (b <> nil) and (b.DataSet <> nil) and not (b.DataSet is TfrxUserDataSet) then
begin
DataSetCB.Text := FReport.GetAlias(b.DataSet);
DataSetCBChange(nil);
end;
end;
procedure TfrxSysMemoEditorForm.DataSetCBChange(Sender: TObject);
begin
FillDataFieldCB;
ExpressionE.Text := '';
UpdateSample;
end;
procedure TfrxSysMemoEditorForm.DataFieldCBChange(Sender: TObject);
begin
ExpressionE.Text := '';
UpdateSample;
end;
procedure TfrxSysMemoEditorForm.ExpressionEButtonClick(Sender: TObject);
var
s: String;
begin
s := TfrxCustomDesigner(Owner).InsertExpression(ExpressionE.Text);
if s <> '' then
ExpressionE.Text := s;
UpdateSample;
end;
procedure TfrxSysMemoEditorForm.FormCreate(Sender: TObject);
begin
if UseRightToLeftAlignment then
FlipChildren(True);
end;
procedure TfrxSysMemoEditorForm.UpdateResouces;
var
i: Integer;
begin
inherited;
Caption := frxGet(3300);
DataBandL.Caption := frxGet(3301);
DataSetL.Caption := frxGet(3302);
DataFieldL.Caption := frxGet(3303);
FunctionL.Caption := frxGet(3304);
ExpressionL.Caption := frxGet(3305);
OKB.Caption := frxGet(1);
CancelB.Caption := frxGet(2);
AggregateRB.Caption := frxGet(3306);
SysVariableRB.Caption := frxGet(3307);
CountInvisibleCB.Caption := frxGet(3308);
TextRB.Caption := frxGet(3309);
RunningTotalCB.Caption := frxGet(3310);
SysVariableCB.Items.BeginUpdate;
SysVariableCB.Items.Clear;
for i := 1 to 13 do
SysVariableCB.Items.Add(frxResources.Get('vt' + IntToStr(i)));
SysVariableCB.Items.EndUpdate;
end;
procedure TfrxSysMemoEditorForm.UpdateSample;
begin
if AggregateRB.Checked then
SampleL.Caption := CreateAggregate
else
SampleL.Caption := '';
end;
procedure TfrxSysMemoEditorForm.FunctionCBChange(Sender: TObject);
begin
UpdateSample;
end;
procedure TfrxSysMemoEditorForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_F1 then
frxResources.Help(Self);
end;
end.