📄 frxcrosseditor.pas
字号:
{******************************************}
{ }
{ 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 + -