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

📄 rm_editorreportmaster.pas

📁 这是一个功能强大
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit RM_EditorReportMaster;

interface

{$I RM.INC}

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, ComCtrls, RM_Common, RM_Class, RM_ReportMaster, Buttons,
  RM_DataSet, RM_GridReport, RM_Ctrls;

type

  TRMFormReportMaster = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Panel1: TPanel;
    GroupBox1: TGroupBox;
    memTitle: TMemo;
    GroupBox2: TGroupBox;
    memCaptionLeft: TMemo;
    memCaptionCenter: TMemo;
    memCaptionRight: TMemo;
    FontDialog1: TFontDialog;
    Panel2: TPanel;
    GroupBox4: TGroupBox;
    memFooterLeft: TMemo;
    memFooterCenter: TMemo;
    memFooterRight: TMemo;
    GroupBox3: TGroupBox;
    memHeaderLeft: TMemo;
    memHeaderCenter: TMemo;
    memHeaderRight: TMemo;
    btnOK: TButton;
    btnCancel: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    tabReportDefine: TTabSheet;
    Panel3: TPanel;
    Label5: TLabel;
    Label6: TLabel;
    edtTitleCaption: TEdit;
    cmbFields: TComboBox;
    Panel4: TPanel;
    btnLoad: TButton;
    btnSave: TButton;
    SpeedButton1: TSpeedButton;
    ColorDialog1: TColorDialog;
    btnDisplayFormat: TSpeedButton;
    Label7: TLabel;
    SpeedButton2: TSpeedButton;
    trvReportData: TTreeView;
    btnNewColumn: TSpeedButton;
    btnNewSubColumn: TSpeedButton;
    btnUpMove: TSpeedButton;
    btnDownMove: TSpeedButton;
    btnUpLevel: TSpeedButton;
    btnDownLevel: TSpeedButton;
    btnDeleteColumn: TSpeedButton;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    Bevel1: TBevel;
    Label16: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Panel7: TPanel;
    Label12: TLabel;
    Bevel2: TBevel;
    Label17: TLabel;
    Label11: TLabel;
    Label8: TLabel;
    Panel5: TPanel;
    edtWidth: TEdit;
    Label23: TLabel;
    Label13: TLabel;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox1: TCheckBox;
    Label10: TLabel;
    Label9: TLabel;
    ComboBox1: TComboBox;
    Edit1: TEdit;
    Bevel3: TBevel;
    Label18: TLabel;
    cmbDataHAlign: TComboBox;
    cmbDataVAlign: TComboBox;
    cmbTitleHAlign: TComboBox;
    cmbTitleVAlign: TComboBox;
    tabDataSet: TTabSheet;
    Panel8: TPanel;
    lstDataSets: TListBox;
    GroupBox5: TGroupBox;
    pnlDefaultFont: TPanel;
    Label19: TLabel;
    chkAutoAppendBlank: TCheckBox;
    chkAutoHCenter: TCheckBox;
    procedure Label1Click(Sender: TObject);
    procedure memTitleDblClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnNewColumnClick(Sender: TObject);
    procedure btnNewSubColumnClick(Sender: TObject);
    procedure btnDeleteColumnClick(Sender: TObject);
    procedure trvReportDataChange(Sender: TObject; Node: TTreeNode);
    procedure btnUpMoveClick(Sender: TObject);
    procedure btnDownMoveClick(Sender: TObject);
    procedure btnUpLevelClick(Sender: TObject);
    procedure btnDownLevelClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure trvReportDataChanging(Sender: TObject; Node: TTreeNode;
      var AllowChange: Boolean);
    procedure SpeedButton1Click(Sender: TObject);
    procedure Panel5Click(Sender: TObject);
    procedure trvReportDataExit(Sender: TObject);
    procedure btnDisplayFormatClick(Sender: TObject);
    procedure edtTitleCaptionKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure btnOKClick(Sender: TObject);
    procedure cmbFieldsClick(Sender: TObject);
    procedure btnLoadClick(Sender: TObject);
    procedure btnSaveClick(Sender: TObject);
    procedure lstDataSetsClick(Sender: TObject);
  private
    { Private declarations }
    FCurNode: TTreeNode;
    FCanRefresh: Boolean;
    FReportMaster: TRMCustomReportMaster;

    FbtnDataColor: TRMColorPickerButton;
    FbtnTitleColor: TRMColorPickerButton;

    procedure DeleteOneNode(aParentNode: TTreeNode);
    procedure ClearTreeInfo;
    procedure Localize;
    procedure GetNodeData;
    procedure SetNodeData;
    procedure LoadFromTreeView;
    procedure SaveToTreeView;
  public
    { Public declarations }
    function Execute(aReportMaster: TRMCustomReportMaster): Boolean;
  end;

implementation

uses
  RM_Utils, RM_Const, RM_Const1, RM_EditorMemo, RM_EditorExpr, RM_EditorFormat;

{$R *.DFM}

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{ TRMFormReportMaster }

type
  THackTRMTreeItem = class(TRMColumnInfo)
  end;

function TRMFormReportMaster.Execute(aReportMaster: TRMCustomReportMaster): Boolean;
var
	lSaveDataSet: TRMDataSet;
begin
  FReportMaster := aReportMaster;
	lSaveDataSet := FReportMaster.DataSet;
  FCanRefresh := False;

  pnlDefaultFont.Font.Assign(FReportMaster.DefaultFont);
  chkAutoAppendBlank.Checked := FReportMaster.AutoAppendBlank;
  chkAutoHCenter.Checked := FReportMaster.AutoHCenter;
  SaveToTreeView;

  Result := (ShowModal = mrOK);
  if Result then
  begin
  	FReportMaster.DefaultFont := pnlDefaultFont.Font;
	  FReportMaster.AutoAppendBlank := chkAutoAppendBlank.Checked;
  	FReportMaster.AutoHCenter := chkAutoHCenter.Checked;
    LoadFromTreeView;
  end
  else
  	FReportMaster.DataSet := lSaveDataSet;
end;

procedure TRMFormReportMaster.LoadFromTreeView; // 读入TTreeView中的信息

  procedure _LoadFromTreeNode(aNode: TTreeNode; aParentNode: TRMTreeNode);
  var
    lNode: TRMTreeNode;
  begin
    while aNode <> nil do
    begin
      lNode := FReportMaster.ReportDataTree.AddChild(aParentNode, '');
      lNode.ColumnInfo.Assign(aNode.Data);
      if aNode.Count > 0 then
        _LoadFromTreeNode(aNode[0], lNode);

      aNode := aNode.getNextSibling;
    end;
  end;

begin
  FReportMaster.ReportDataTree.Clear;
  if trvReportData.Items.Count > 0 then
    _LoadFromTreeNode(trvReportData.Items[0], nil);
end;

procedure TRMFormReportMaster.SaveToTreeView; // 将信息保存倒TTreeView中

  procedure _SaveToTreeNode(aNode: TRMTreeNode; aParentTreeNode: TTreeNode);
  var
    lTreeNode: TTreeNode;
    lNodeInfo: TRMColumnInfo;
  begin
    while aNode <> nil do
    begin
      lNodeInfo := TRMColumnInfo.Create;
      lNodeInfo.Assign(aNode.ColumnInfo);
      lTreeNode := trvReportData.Items.AddChildObject(aParentTreeNode, lNodeInfo.TitleCaption, lNodeInfo);
      if aNode.Count > 0 then
        _SaveToTreeNode(aNode[0], lTreeNode);

      aNode := aNode.GetNextSibling;
    end;
  end;

begin
  FCanRefresh := False;
  try
    ClearTreeInfo;
    if FReportMaster.ReportDataTree.Count > 0 then
      _SaveToTreeNode(FReportMaster.ReportDataTree.Items[0], nil);
  finally
    FCanRefresh := True;
  end;
end;

procedure TRMFormReportMaster.GetNodeData;
var
  lNodeData: TRMColumnInfo;
begin
  lNodeData := TRMColumnInfo(FCurNode.Data);

  cmbFields.Text := lNodeData.DataFieldName;
  cmbDataHAlign.ItemIndex := Byte(lNodeData.DataHAlign);
  cmbDataVAlign.ItemIndex := BYte(lNodeData.DataVAlign);
  Panel7.Font.Assign(lNodeData.DataFont);
  FBtnDataColor.CurrentColor := lNodeData.DataFillColor;

  edtTitleCaption.Text := lNodeData.TitleCaption;
  cmbTitleHAlign.ItemIndex := Byte(lNodeData.TitleHAlign);
  cmbTitleVAlign.ItemIndex := BYte(lNodeData.TitleVAlign);
  Panel5.Font.Assign(lNodeData.TitleFont);
  FBtnTitleColor.CurrentColor := lNodeData.TitleFillColor;

  edtWidth.Text := IntToStr(lNodeData.Width);
end;

procedure TRMFormReportMaster.SetNodeData;
var
  lNodeData: TRMColumnInfo;
begin
  lNodeData := TRMColumnInfo(FCurNode.Data);
  if edtTitleCaption.Text = '' then
    FCurNode.Text := '???'
  else
  begin
    FCurNode.Text := edtTitleCaption.Text;
  end;

  lNodeData.TitleCaption := FCurNode.Text;
  lNodeData.TitleHAlign := TRMHAlign(cmbTitleHAlign.ItemIndex);
  lNodeData.TitleVAlign := TRMVAlign(cmbTitleVAlign.ItemIndex);
  lNodeData.TitleFont.Assign(Panel5.Font);
  lNodeData.TitleFillColor := FBtnTitleColor.CurrentColor;

  lNodeData.DataFieldName := cmbFields.Text;
  lNodeData.DataHAlign := TRMHAlign(cmbDataHAlign.ItemIndex);
  lNodeData.DataVAlign := TRMVAlign(cmbDataVAlign.ItemIndex);
  lNodeData.DataFont.Assign(Panel7.Font);
  lNodeData.DataFillColor := FBtnDataColor.CurrentColor;

  lNodeData.Width := StrToInt(edtWidth.Text);
end;

procedure TRMFormReportMaster.DeleteOneNode(aParentNode: TTreeNode);
var
  lNode, lNode1: TTreeNode;
begin
  lNode := aParentNode.getFirstChild;
  while lNode <> nil do
  begin
    lNode1 := aParentNode.GetNextChild(lNode);
    DeleteOneNode(lNode);
    lNode := lNode1;
  end;

  if aParentNode.Data <> nil then
  begin
    TRMColumnInfo(aParentNode.Data).Free;
    aParentNode.Data := nil;
  end;
  aParentNode.Delete;
end;

procedure TRMFormReportMaster.ClearTreeInfo;
var
  i, lCount: Integer;
  lNode: TTreeNode;
begin
  lCount := trvReportData.Items.Count;
  trvReportData.Items.BeginUpdate;
  try
    for i := 0 to lCount - 1 do
    begin
      lNode := trvReportData.Items[i];
      if lNode.Data <> nil then
      begin
        TRMColumnInfo(lNode.Data).Free;
        lNode.Data := nil;
      end;
    end;
  finally
    trvReportData.Items.Clear;
    trvReportData.Items.EndUpdate;
  end;
end;

procedure TRMFormReportMaster.Localize;
begin
  Font.Name := RMLoadStr(SRMDefaultFontName);
  Font.Size := StrToInt(RMLoadStr(SRMDefaultFontSize));
  Font.Charset := StrToInt(RMLoadStr(SCharset));

  RMSetStrProp(TabSheet1, 'Caption', rmRes + 867);
  RMSetStrProp(Label3, 'Caption', rmRes + 868);
  RMSetStrProp(Label4, 'Caption', rmRes + 869);
  RMSetStrProp(TabSheet2, 'Caption', rmRes + 870);
  RMSetStrProp(Label1, 'Caption', rmRes + 871);
  RMSetStrProp(Label2, 'Caption', rmRes + 872);

  RMSetStrProp(tabDataSet, 'Caption', rmRes + 886);
  RMSetStrProp(GroupBox5, 'Caption', rmRes + 887);
  RMSetStrProp(Label19, 'Caption', rmRes + 888);
  RMSetStrProp(chkAutoAppendBlank, 'Caption', rmRes + 889);
  RMSetStrProp(chkAutoHCenter, 'Caption', rmRes + 890);

  RMSetStrProp(tabReportDefine, 'Caption', rmRes + 891);
  RMSetStrProp(Label7, 'Caption', rmRes + 891);
  RMSetStrProp(btnNewColumn, 'Caption', rmRes + 892);
  RMSetStrProp(btnDeleteColumn, 'Caption', rmRes + 893);
  RMSetStrProp(btnNewSubColumn, 'Caption', rmRes + 894);
  RMSetStrProp(btnUpMove, 'Hint', rmRes + 909);
  RMSetStrProp(btnDownMove, 'Hint', rmRes + 910);
  RMSetStrProp(btnUpLevel, 'Hint', rmRes + 911);
  RMSetStrProp(btnDownLevel, 'Hint', rmRes + 912);
  RMSetStrProp(Label5, 'Caption', rmRes + 895);
  RMSetStrProp(Label6, 'Caption', rmRes + 896);
  RMSetStrProp(Label16, 'Caption', rmRes + 897);
  RMSetStrProp(Label11, 'Caption', rmRes + 898);
  RMSetStrProp(Label14, 'Caption', rmRes + 900);

⌨️ 快捷键说明

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