📄 frxcrosseditor.pas
字号:
{******************************************}
{ }
{ FastReport v3.0 }
{ Cross editor }
{ }
{ Copyright (c) 1998-2006 }
{ 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);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
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, frxFormUtils;
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
Caption := frxGet(4300);
DatasetL.Caption := frxGet(4301);
DimensionsL.Caption := frxGet(4302);
RowsL.Caption := frxGet(4303);
ColumnsL.Caption := frxGet(4304);
CellsL.Caption := frxGet(4305);
StructureL.Caption := frxGet(4306);
RowHeaderCB.Caption := frxGet(4307);
ColumnHeaderCB.Caption := frxGet(4308);
RowTotalCB.Caption := frxGet(4309);
ColumnTotalCB.Caption := frxGet(4310);
SwapB.Hint := frxGet(4311);
StyleCB.Hint := frxGet(4312);
FontB.Hint := frxGet(4313);
AlignLeftB.Hint := frxGet(4314);
AlignCenterB.Hint := frxGet(4315);
AlignRightB.Hint := frxGet(4316);
RotationB.Hint := frxGet(4317);
HighlightB.Hint := frxGet(4318);
FormatB.Hint := frxGet(4319);
FrameB.Hint := frxGet(4320);
FillColorB.Hint := frxGet(4321);
Func1MI.Caption := frxGet(4322);
Func2MI.Caption := frxGet(4323);
Func3MI.Caption := frxGet(4324);
Func4MI.Caption := frxGet(4325);
Func5MI.Caption := frxGet(4326);
Func6MI.Caption := frxGet(4327);
Sort1MI.Caption := frxGet(4328);
Sort2MI.Caption := frxGet(4329);
Sort3MI.Caption := frxGet(4330);
BoldMI.Caption := frxGet(4331);
ItalicMI.Caption := frxGet(4332);
UnderlineMI.Caption := frxGet(4333);
SuperScriptMI.Caption := frxGet(4334);
SubScriptMI.Caption := frxGet(4335);
CondensedMI.Caption := frxGet(4336);
WideMI.Caption := frxGet(4337);
N12cpiMI.Caption := frxGet(4338);
N15cpiMI.Caption := frxGet(4339);
CancelB.Hint := frxGet(2);
OkB.Hint := frxGet(1);
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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -