⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frxeditsysmemo.pas

📁 报表源码 FastReport 3 is new generation of the report generators components. It consists of report engin
💻 PAS
字号:
{******************************************}
{ }
{ FastReport v3.0 }
{ SysMemo editor }
{ }
{ Copyright (c) 1998-2005 }
{ by Alexander Tzyganenko, }
{ Fast Reports Inc. }
{ }
{******************************************}

unit frxEditSysMemo;

interface

{$I frx.inc}

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, frxClass, frxCtrls
{$IFDEF Delphi6}
, Variants
{$ENDIF};
  

type
  TfrxSysMemoEditorForm = class(TForm)
    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;
    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);
  private
    FAggregateOnly:Boolean;
    FReport:TfrxReport;
    FText:String;
    procedure CalcWidth(RB:TRadioButton);
    procedure FillDataBandCB;
    procedure FillDataFieldCB;
    procedure FillDataSetCB;
  public
    property AggregateOnly:Boolean read FAggregateOnly write FAggregateOnly;
    property Text:String read FText write FText;
  end;

implementation

{$R *.DFM}

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;
  CalcWidth(SysVariableRB);
  CalcWidth(AggregateRB);
  CalcWidth(TextRB);
  FillDataBandCB;
  FillDataSetCB;

  s:= FText;
  if s<>'' then
    SetLength(s, Length(s)-2); { cut #13#10 }

  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;
end;

procedure TfrxSysMemoEditorForm.FormHide(Sender:TObject);
var
  s:String;
  i:Integer;
begin
  if ModalResult = mrOk then
  begin
    if SysVariableRB.Checked then
      FText:= SysVariableCB.Text
    else if AggregateRB.Checked then
    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;

      FText:= '['+s+']';
    end
    else
      FText:= TextE.Text
  end;
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:= 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:= '';
end;

procedure TfrxSysMemoEditorForm.DataFieldCBChange(Sender:TObject);
begin
  ExpressionE.Text:= '';
end;

procedure TfrxSysMemoEditorForm.ExpressionEButtonClick(Sender:TObject);
var
  s:String;
begin
  s:= TfrxCustomDesigner(Owner).InsertExpression(ExpressionE.Text);
  if s<>'' then
    ExpressionE.Text:= s;
end;

procedure TfrxSysMemoEditorForm.CalcWidth(RB:TRadioButton);
begin
  RB.Width:= Canvas.TextWidth(RB.Caption)+24;
end;

procedure TfrxSysMemoEditorForm.FormCreate(Sender:TObject);
var
  i:Integer;
begin
  frxResources.LocalizeForm(Self);
  for i:= 1 to 6 do
    SysVariableCB.Items.Add(frxResources.Get('vt'+IntToStr(i)));
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -