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

📄 frxcrosseditor.pas

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

unit frxCrossEditor;

interface

{$I frx.inc}

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ToolWin, ComCtrls, ExtCtrls, frxDock, frxCross, frxCrossMatrix,
  frxCustomEditors, frxClass, frxDMPClass, frxCtrls, ImgList, Menus, Buttons
{$IFDEF Delphi6}
, Variants
{$ENDIF};

type
  TfrxCrossEditor = class(TfrxViewEditor)
  public
    function Edit:Boolean; override;
    function Execute(Tag:Integer; Checked:Boolean):Boolean; override;
    function HasEditor:Boolean; override;
    procedure GetMenuItems; override;
  end;

  TfrxCrossEditorForm = class(TForm)
    ScrollBox1:TScrollBox;
    ToolBar:TToolBar;
    FontB:TToolButton;
    PaintBox:TPaintBox;
    AlignLeftB:TToolButton;
    AlignCenterB:TToolButton;
    AlignRightB:TToolButton;
    RotationB:TToolButton;
    FillColorB:TToolButton;
    FrameB:TToolButton;
    CancelB:TToolButton;
    OkB:TToolButton;
    Sep1:TToolButton;
    Sep2:TToolButton;
    HighlightB:TToolButton;
    FormatB:TToolButton;
    Sep3:TToolButton;
    frTBPanel1:TfrxTBPanel;
    StyleCB:TfrxComboBox;
    RotationPopup:TPopupMenu;
    R0MI:TMenuItem;
    R90MI:TMenuItem;
    R180MI:TMenuItem;
    R270MI:TMenuItem;
    FuncPopup:TPopupMenu;
    Func1MI:TMenuItem;
    Func2MI:TMenuItem;
    Func3MI:TMenuItem;
    Func4MI:TMenuItem;
    Func5MI:TMenuItem;
    Func6MI:TMenuItem;
    SortPopup:TPopupMenu;
    Sort1MI:TMenuItem;
    Sort2MI:TMenuItem;
    Sort3MI:TMenuItem;
    DatasetL:TGroupBox;
    DatasetCB:TComboBox;
    FieldsLB:TListBox;
    DimensionsL:TGroupBox;
    RowsL:TLabel;
    RowsE:TEdit;
    ColumnsL:TLabel;
    ColumnsE:TEdit;
    CellsL:TLabel;
    CellsE:TEdit;
    UpDown1:TUpDown;
    UpDown2:TUpDown;
    UpDown3:TUpDown;
    DMPPopup:TPopupMenu;
    BoldMI:TMenuItem;
    ItalicMI:TMenuItem;
    UnderlineMI:TMenuItem;
    SuperScriptMI:TMenuItem;
    SubScriptMI:TMenuItem;
    CondensedMI:TMenuItem;
    WideMI:TMenuItem;
    N12cpiMI:TMenuItem;
    N15cpiMI:TMenuItem;
    StructureL:TGroupBox;
    Shape1:TShape;
    Shape2:TShape;
    SwapB:TSpeedButton;
    RowsLB:TListBox;
    ColumnsLB:TListBox;
    CellsLB:TListBox;
    RowHeaderCB:TCheckBox;
    ColumnHeaderCB:TCheckBox;
    RowTotalCB:TCheckBox;
    ColumnTotalCB:TCheckBox;
    procedure FormCreate(Sender:TObject);
    procedure CancelBClick(Sender:TObject);
    procedure OkBClick(Sender:TObject);
    procedure PaintBoxPaint(Sender:TObject);
    procedure FormShow(Sender:TObject);
    procedure FormHide(Sender:TObject);
    procedure DatasetCBClick(Sender:TObject);
    procedure DatasetCBDrawItem(Control:TWinControl; Index:Integer;
      ARect:TRect; State:TOwnerDrawState);
    procedure FieldsLBDrawItem(Control:TWinControl; Index:Integer;
      ARect:TRect; State:TOwnerDrawState);
    procedure LBDrawItem(Control:TWinControl; Index:Integer;
      ARect:TRect; State:TOwnerDrawState);
    procedure CellsLBDrawItem(Control:TWinControl; Index:Integer;
      ARect:TRect; State:TOwnerDrawState);
    procedure LBDragOver(Sender, Source:TObject; X, Y:Integer;
      State:TDragState; var Accept:Boolean);
    procedure LBDragDrop(Sender, Source:TObject; X, Y:Integer);
    procedure LBMouseDown(Sender:TObject; Button:TMouseButton;
      Shift:TShiftState; X, Y:Integer);
    procedure PaintBoxMouseDown(Sender:TObject; Button:TMouseButton;
      Shift:TShiftState; X, Y:Integer);
    procedure ToolButtonClick(Sender:TObject);
    procedure PaintBoxDblClick(Sender:TObject);
    procedure LBClick(Sender:TObject);
    procedure CBClick(Sender:TObject);
    procedure FuncMIClick(Sender:TObject);
    procedure CellsLBMouseUp(Sender:TObject; Button:TMouseButton;
      Shift:TShiftState; X, Y:Integer);
    procedure StyleCBClick(Sender:TObject);
    procedure SortMIClick(Sender:TObject);
    procedure SwapBClick(Sender:TObject);
    procedure DimesionsChange(Sender:TObject);
    procedure LBDblClick(Sender:TObject);
  private
    FCross:TfrxCustomCrossView;
    FCurList:TListBox;
    FFuncNames:array[TfrxCrossFunction] of String;
    FImageList:TImageList;
    FSelectedObject:TfrxCustomMemoView;
    FSelectedPoint:TPoint;
    FSortNames:array[TfrxCrossSortOrder] of String;
    FStyleSheet:TfrxStyleSheet;
    FTempCross:TfrxDBCrossView;
    FUpdating:Boolean;
    procedure DrawCross;
    procedure ReflectChanges;
    procedure UpdateControls;
  public
    constructor Create(AOwner:TComponent); override;
    destructor Destroy; override;
    property Cross:TfrxCustomCrossView read FCross write FCross;
  end;

implementation

{$R *.DFM}

uses
  frxDsgnIntf, frxEditFormat, frxEditHighlight, frxEditMemo,
  frxEditFrame, frxDesgnCtrls, frxRes, frxUtils;

const
  CrossStyles =
'<?xml version="1.0" encoding="utf-8"?>'+
'<stylesheet>'+
'<style Name="Standard">'+
'<item Name="cell" Color="536870911" Frame.Typ="15"/>'+
'<item Name="column" Color="536870911" Frame.Typ="15"/>'+
'<item Name="row" Color="536870911" Frame.Typ="15"/>'+
'<item Name="coltotal" Color="536870911" Font.Style="1" Frame.Typ="15"/>'+
'<item Name="rowtotal" Color="536870911" Font.Style="1" Frame.Typ="15"/>'+
'<item Name="colgrand" Color="536870911" Font.Style="1" Frame.Typ="15"/>'+
'<item Name="rowgrand" Color="536870911" Font.Style="1" Frame.Typ="15"/>'+
'</style>'+
'<style Name="Corporate">'+
'<item Name="cell" Color="536870911" Frame.Typ="12"/>'+
'<item Name="column" Color="8421504" Font.Color="16777215" Frame.Typ="15"/>'+
'<item Name="row" Color="8421504" Font.Color="16777215" Frame.Typ="15"/>'+
'<item Name="coltotal" Color="52479" Font.Style="1" Frame.Typ="15"/>'+
'<item Name="rowtotal" Color="52479" Font.Style="1" Frame.Typ="15"/>'+
'<item Name="colgrand" Color="52479" Font.Style="1" Frame.Typ="15"/>'+
'<item Name="rowgrand" Color="52479" Font.Style="1" Frame.Typ="15"/>'+
'</style>'+
'<style Name="Grayed">'+
'<item Name="cell" Color="536870911" Frame.Typ="15"/>'+
'<item Name="column" Color="536870911" Frame.Typ="15"/>'+
'<item Name="row" Color="536870911" Frame.Typ="15"/>'+
'<item Name="coltotal" Color="15790320" Font.Style="1" Frame.Typ="15"/>'+
'<item Name="rowtotal" Color="15790320" Font.Style="1" Frame.Typ="15"/>'+
'<item Name="colgrand" Color="15000804" Font.Style="1" Frame.Typ="15"/>'+
'<item Name="rowgrand" Color="15000804" Font.Style="1" Frame.Typ="15"/>'+
'</style>'+
'<style Name="Yellow">'+
'<item Name="cell" Color="536870911" Frame.Typ="12"/>'+
'<item Name="column" Color="13434879" Frame.Color="16777215" Frame.Typ="15"/>'+
'<item Name="row" Color="13434879" Frame.Color="16777215" Frame.Typ="15"/>'+
'<item Name="coltotal" Color="10027007" Frame.Color="16777215" Frame.Typ="15"/>'+
'<item Name="rowtotal" Color="10027007" Frame.Color="16777215" Frame.Typ="15"/>'+
'<item Name="colgrand" Color="10027007" Font.Style="1" Frame.Color="16777215" Frame.Typ="15"/>'+
'<item Name="rowgrand" Color="10027007" Font.Style="1" Frame.Color="16777215" Frame.Typ="15"/>'+
'</style>'+
'<style Name="Green">'+
'<item Name="cell" Color="536870911" Frame.Typ="15"/>'+
'<item Name="column" Color="13434828" Frame.Typ="15"/>'+
'<item Name="row" Color="13434828" Frame.Typ="15"/>'+
'<item Name="coltotal" Color="8833409" Font.Style="1" Frame.Typ="15"/>'+
'<item Name="rowtotal" Color="8833409" Font.Style="1" Frame.Typ="15"/>'+
'<item Name="colgrand" Color="8833409" Font.Style="1" Frame.Typ="15"/>'+
'<item Name="rowgrand" Color="8833409" Font.Style="1" Frame.Typ="15"/>'+
'</style>'+
'<style Name="Blue">'+
'<item Name="cell" Color="536870911" Frame.Typ="15"/>'+
'<item Name="column" Color="16774348" Frame.Typ="15"/>'+
'<item Name="row" Color="16774348" Frame.Typ="15"/>'+
'<item Name="coltotal" Color="16763904" Font.Style="1" Frame.Typ="15"/>'+
'<item Name="rowtotal" Color="16763904" Font.Style="1" Frame.Typ="15"/>'+
'<item Name="colgrand" Color="16763904" Font.Style="1" Frame.Typ="15"/>'+
'<item Name="rowgrand" Color="16763904" Font.Style="1" Frame.Typ="15"/>'+
'</style>'+
'<style Name="Red">'+
'<item Name="cell" Color="536870911" Frame.Typ="15"/>'+
'<item Name="column" Color="9934847" Frame.Typ="15"/>'+
'<item Name="row" Color="9934847" Frame.Typ="15"/>'+
'<item Name="coltotal" Color="7434751" Font.Style="1" Frame.Typ="15"/>'+
'<item Name="rowtotal" Color="7434751" Font.Style="1" Frame.Typ="15"/>'+
'<item Name="colgrand" Color="7434751" Font.Style="1" Frame.Typ="15"/>'+
'<item Name="rowgrand" Color="7434751" Font.Style="1" Frame.Typ="15"/>'+
'</style>'+
'</stylesheet>';

{ TfrxCrossEditor }

function TfrxCrossEditor.Edit:Boolean;
begin
  with TfrxCrossEditorForm.Create(Designer) do
  begin
    Cross:= TfrxCustomCrossView(Component);
    Result:= ShowModal = mrOk;
    Free;
  end;
end;

function TfrxCrossEditor.Execute(Tag:Integer; Checked:Boolean):Boolean;
var
  i:Integer;
  c:TfrxComponent;
  v:TfrxCustomCrossView;
begin
  Result:= False;
  for i:= 0 to Designer.SelectedObjects.Count-1 do
  begin
    c:= Designer.SelectedObjects[i];
    if (c is TfrxCustomCrossView) and not (rfDontModify in c.Restrictions) then
    begin
      v:= TfrxCustomCrossView(c);
      case Tag of
        1:v.RepeatHeaders:= Checked;
        2:v.Border:= Checked;
        3:v.DownThenAcross:= Checked;
      end;

      Result:= True;
    end;
  end;
end;

procedure TfrxCrossEditor.GetMenuItems;
var
  v:TfrxCustomCrossView;
begin
  v:= TfrxCustomCrossView(Component);

  AddItem(frxResources.Get('crRepHdrs'), 1, v.RepeatHeaders);
  AddItem(frxResources.Get('crBorder'), 2, v.Border);
  AddItem(frxResources.Get('crDown'), 3, v.DownThenAcross);
end;

function TfrxCrossEditor.HasEditor:Boolean;
begin
  Result:= True;
end;

{ TfrxCrossEditorForm }

constructor TfrxCrossEditorForm.Create(AOwner:TComponent);
var
  TempStream:TStringStream;
begin
  FUpdating:= True;
  inherited;
  FTempCross:= TfrxDBCrossView.Create(nil);
  FFuncNames[cfNone]:= frxResources.Get('crNone');
  FFuncNames[cfSum]:= frxResources.Get('crSum');
  FFuncNames[cfMin]:= frxResources.Get('crMin');
  FFuncNames[cfMax]:= frxResources.Get('crMax');
  FFuncNames[cfAvg]:= frxResources.Get('crAvg');
  FFuncNames[cfCount]:= frxResources.Get('crCount');
  FSortNames[soAscending]:= frxResources.Get('crAsc');
  FSortNames[soDescending]:= frxResources.Get('crDesc');
  FSortNames[soNone]:= frxResources.Get('crNone');

  FStyleSheet:= TfrxStyleSheet.Create;
  TempStream:= TStringStream.Create(CrossStyles);
  FStyleSheet.LoadFromStream(TempStream);
  TempStream.Free;
end;

destructor TfrxCrossEditorForm.Destroy;
begin
  FStyleSheet.Free;
  FTempCross.Free;
  inherited;
end;

procedure TfrxCrossEditorForm.FormCreate(Sender:TObject);
begin
  frxResources.LocalizeForm(Self);
  FImageList:= frxResources.MainButtonImages;
  ToolBar.Images:= FImageList;
end;

procedure TfrxCrossEditorForm.FormShow(Sender:TObject);

  procedure SelectDataset;
  begin
    DatasetCB.ItemIndex:= DatasetCB.Items.IndexOfObject(FCross.DataSet);
    if DatasetCB.ItemIndex =-1 then
      DatasetCB.ItemIndex:= 0;
    DatasetCBClick(nil);
  end;

  procedure SelectFields;
  var
    i, j:Integer;
  begin
    for i:= 0 to FCross.RowFields.Count-1 do
    begin
      j:= FieldsLB.Items.IndexOf(FCross.RowFields[i]);
// if (j<>-1) or (FCross is TfrxCrossView) then
      begin
        RowsLB.Items.Add(FCross.RowFields[i]);
        FieldsLB.Items.Delete(j);
      end;
    end;

    for i:= 0 to FCross.ColumnFields.Count-1 do
    begin
      j:= FieldsLB.Items.IndexOf(FCross.ColumnFields[i]);
// if (j<>-1) or (FCross is TfrxCrossView) then
      begin
        ColumnsLB.Items.Add(FCross.ColumnFields[i]);
        FieldsLB.Items.Delete(j);
      end;
    end;

    CellsLB.Items:= FCross.CellFields;
  end;

begin
  FTempCross.Assign(FCross);
  FCross.Report.GetDataSetList(DatasetCB.Items);
  FStyleSheet.GetList(StyleCB.Items);
  StyleCB.ItemIndex:= 0;
  UpdateControls;
  SelectDataset;
  SelectFields;

  FUpdating:= True;

  if FCross is TfrxCrossView then
  begin
    ColumnsLB.DragMode:= dmManual;
    RowsLB.DragMode:= dmManual;
    CellsLB.DragMode:= dmManual;
    SwapB.Visible:= False;
    DimensionsL.Visible:= True;
    RowsE.Text:= IntToStr(FCross.RowLevels);
    ColumnsE.Text:= IntToStr(FCross.ColumnLevels);
    CellsE.Text:= IntToStr(FCross.CellLevels);
  end
  else
    DatasetL.Visible:= True;

  if FCross.DotMatrix then
  begin
    FontB.DropDownMenu:= DMPPopup;
    FontB.OnClick:= nil;
  end;

  ColumnHeaderCB.Checked:= FCross.ShowColumnHeader;
  RowHeaderCB.Checked:= FCross.ShowRowHeader;
  ColumnTotalCB.Checked:= FCross.ShowColumnTotal;
  RowTotalCB.Checked:= FCross.ShowRowTotal;

  FUpdating:= False;
end;

⌨️ 快捷键说明

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