📄 frxcharteditor.pas
字号:
{******************************************}
{ }
{ FastReport v3.0 }
{ Chart design editor }
{ }
{ Copyright (c) 1998-2005 }
{ by Alexander Tzyganenko, }
{ Fast Reports Inc. }
{ }
{******************************************}
unit frxChartEditor;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Menus, ExtCtrls, Buttons, frxClass, frxChart, frxCustomEditors,
frxCtrls, frxInsp, frxDock, TeeProcs, TeEngine, Chart, Series, ComCtrls,
ImgList
{$IFDEF Delphi6}
, Variants
{$ENDIF};
type
TfrxChartEditor = class(TfrxViewEditor)
public
function Edit:Boolean; override;
function HasEditor:Boolean; override;
procedure GetMenuItems; override;
function Execute(Tag:Integer; Checked:Boolean):Boolean; override;
end;
TfrxChartEditorForm = class(TForm)
OkB:TButton;
Panel1:TPanel;
InspSite:TPanel;
ChartTree:TTreeView;
Panel2:TPanel;
ChartImages:TImageList;
Image1:TImage;
Popup:TPopupMenu;
LineMI:TMenuItem;
AreaMI:TMenuItem;
PointMI:TMenuItem;
BarMI:TMenuItem;
HorizBarMI:TMenuItem;
PieMI:TMenuItem;
GanttMI:TMenuItem;
FastLineMI:TMenuItem;
TreePanel:TPanel;
AddB:TSpeedButton;
DeleteB:TSpeedButton;
SourcePanel:TPanel;
DBSourceRB:TRadioButton;
FixedDataRB:TRadioButton;
DBSourceP:TGroupBox;
DatasetLbl:TLabel;
X1Lbl:TLabel;
Y1Lbl:TLabel;
DatasetsCB:TComboBox;
X1ValuesCB:TComboBox;
Y1ValuesCB:TComboBox;
FixedDataP:TGroupBox;
X3Lbl:TLabel;
Y3Lbl:TLabel;
XValuesE:TEdit;
YValuesE:TEdit;
InsExpressionB1:TSpeedButton;
InsExpressionB2:TSpeedButton;
CancelB:TButton;
OtherLbl:TGroupBox;
ShowTopLbl:TLabel;
CaptionLbl:TLabel;
SortLbl:TLabel;
TopNE:TEdit;
TopNCaptionE:TEdit;
SortCB:TComboBox;
UpDown1:TUpDown;
BandSourceP:TGroupBox;
BandLbl:TLabel;
X2Lbl:TLabel;
Y2Lbl:TLabel;
InsExpressionB3:TSpeedButton;
InsExpressionB4:TSpeedButton;
DatabandsCB:TComboBox;
X2ValuesCB:TComboBox;
Y2ValuesCB:TComboBox;
BandSourceRB:TRadioButton;
procedure FormShow(Sender:TObject);
procedure ChartTreeClick(Sender:TObject);
procedure AddBClick(Sender:TObject);
procedure AddClick(Sender:TObject);
procedure DeleteBClick(Sender:TObject);
procedure InsExpressionB1Click(Sender:TObject);
procedure InsExpressionB2Click(Sender:TObject);
procedure DoClick(Sender:TObject);
procedure FormCreate(Sender:TObject);
procedure UpDown1Click(Sender:TObject; Button:TUDBtnType);
procedure InsExpressionB3Click(Sender:TObject);
procedure InsExpressionB4Click(Sender:TObject);
private
{ Private declarations }
FChart:TfrxChartView;
FCurSeries:TfrxSeriesItem;
FInspector:TfrxObjectInspector;
FReport:TfrxReport;
FUpdating:Boolean;
procedure CalcWidth(RB:TRadioButton);
procedure EnablePanel(P:TWinControl; E:Boolean);
procedure FillDataFields;
procedure FillDataFields1;
public
{ Public declarations }
constructor Create(AOwner:TComponent); override;
destructor Destroy; override;
property Chart:TfrxChartView read FChart write FChart;
end;
implementation
uses frxDsgnIntf, frxUtils, GanttCh, frxRes;
{$R *.DFM}
type
TSeriesClass = class of TChartSeries;
THackControl = class(TControl);
const
ChartSeries:array[0..7] of TSeriesClass =
(TLineSeries, TAreaSeries, TPointSeries, TBarSeries, THorizBarSeries,
TPieSeries, TGanttSeries, TFastLineSeries);
{ TfrxChartEditor }
function TfrxChartEditor.HasEditor:Boolean;
begin
Result:= True;
end;
function TfrxChartEditor.Edit:Boolean;
begin
with TfrxChartEditorForm.Create(Designer) do
begin
Chart.Assign(TfrxChartView(Component));
Result:= ShowModal = mrOk;
if Result then
TfrxChartView(Component).Assign(Chart);
Free;
end;
end;
function TfrxChartEditor.Execute(Tag:Integer; Checked:Boolean):Boolean;
var
i:Integer;
c:TfrxComponent;
v:TfrxChartView;
begin
Result:= inherited Execute(Tag, Checked);
for i:= 0 to Designer.SelectedObjects.Count-1 do
begin
c:= Designer.SelectedObjects[i];
if (c is TfrxChartView) and not (rfDontModify in c.Restrictions) then
begin
v:= TfrxChartView(c);
if Tag = 1 then
v.Chart.View3D:= Checked
else if Tag = 2 then
v.Chart.AxisVisible:= Checked;
Result:= True;
end;
end;
end;
procedure TfrxChartEditor.GetMenuItems;
var
v:TfrxChartView;
begin
v:= TfrxChartView(Component);
AddItem(frxResources.Get('ch3D'), 1, v.Chart.View3D);
AddItem(frxResources.Get('chAxis'), 2, v.Chart.AxisVisible);
inherited;
end;
{ TfrxChartEditorForm }
constructor TfrxChartEditorForm.Create(AOwner:TComponent);
begin
inherited;
FReport:= TfrxCustomDesigner(AOwner).Report;
FChart:= TfrxChartView.Create(FReport);
FInspector:= TfrxObjectInspector.Create(Owner);
with FInspector do
begin
SplitterPos:= InspSite.Width div 2;
Box.Parent:= InspSite;
Box.Align:= alClient;
end;
OnMouseWheelDown:= FInspector.FormMouseWheelDown;
OnMouseWheelUp:= FInspector.FormMouseWheelUp;
frxAssignImages(Image1.Picture.Bitmap, 16, 16, ChartImages);
Image1.Free;
end;
destructor TfrxChartEditorForm.Destroy;
begin
FChart.Free;
inherited;
end;
procedure TfrxChartEditorForm.FormShow(Sender:TObject);
procedure FillChartTree;
var
i, j, ind:Integer;
n:TTreeNode;
begin
for i:= 0 to FChart.Chart.SeriesCount-1 do
begin
n:= ChartTree.Items.AddChild(ChartTree.Items[0], 'Series'+IntToStr(i+1));
ind:= 9;
for j:= 0 to 7 do
if FChart.Chart.Series[i].ClassType = ChartSeries[j] then
begin
ind:= j+1;
break;
end;
n.ImageIndex:= ind;
n.SelectedIndex:= ind;
n.StateIndex:= ind;
n.Data:= FChart.Chart.Series[i];
end;
ChartTree.Items[0].Data:= FChart.Chart;
ChartTree.FullExpand;
ChartTree.Selected:= ChartTree.Items[0];
ChartTreeClick(nil);
end;
procedure FillBandsList;
var
i:Integer;
c:TfrxComponent;
begin
for i:= 0 to FReport.Designer.Objects.Count-1 do
begin
c:= FReport.Designer.Objects[i];
if c is TfrxDataBand then
DatabandsCB.Items.Add(c.Name);
end;
end;
begin
FInspector.Inspect([FChart.Chart]);
FillChartTree;
FReport.GetDatasetList(DatasetsCB.Items);
FillBandsList;
CalcWidth(DBSourceRB);
CalcWidth(BandSourceRB);
CalcWidth(FixedDataRB);
SortCB.Items.Add(frxResources.Get('chsoNone'));
SortCB.Items.Add(frxResources.Get('chsoAscending'));
SortCB.Items.Add(frxResources.Get('chsoDescending'));
end;
procedure TfrxChartEditorForm.ChartTreeClick(Sender:TObject);
var
i:Integer;
begin
i:= ChartTree.Selected.AbsoluteIndex-1;
if i >= 0 then
FCurSeries:= FChart.SeriesData[i] else
FCurSeries:= nil;
FInspector.Inspect([ChartTree.Selected.Data]);
EnablePanel(SourcePanel, FCurSeries<>nil);
DeleteB.Visible:= FCurSeries<>nil;
if FCurSeries<>nil then
begin
FUpdating:= True;
if FCurSeries.DataType = dtDBData then
begin
DBSourceRB.Checked:= True;
EnablePanel(DBSourceP, True);
EnablePanel(BandSourceP, False);
EnablePanel(FixedDataP, False);
X1ValuesCB.Text:= FCurSeries.XSource;
Y1ValuesCB.Text:= FCurSeries.YSource;
if FCurSeries.DataSet = nil then
DatasetsCB.ItemIndex:=-1 else
DatasetsCB.ItemIndex:= DatasetsCB.Items.IndexOf(
FReport.GetAlias(FCurSeries.DataSet));
FillDataFields;
end
else if FCurSeries.DataType = dtBandData then
begin
BandSourceRB.Checked:= True;
EnablePanel(DBSourceP, False);
EnablePanel(BandSourceP, True);
EnablePanel(FixedDataP, False);
X2ValuesCB.Text:= FCurSeries.XSource;
Y2ValuesCB.Text:= FCurSeries.YSource;
if FCurSeries.DataBand = nil then
DatabandsCB.ItemIndex:=-1 else
DatabandsCB.ItemIndex:= DatabandsCB.Items.IndexOf(FCurSeries.DataBand.Name);
FillDataFields1;
end
else
begin
FixedDataRB.Checked:= True;
EnablePanel(DBSourceP, False);
EnablePanel(BandSourceP, False);
EnablePanel(FixedDataP, True);
XValuesE.Text:= FCurSeries.XSource;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -