📄 frxcharteditor.pas
字号:
{******************************************}
{ }
{ FastReport v4.0 }
{ Chart design editor }
{ }
{ Copyright (c) 1998-2008 }
{ by Alexander Tzyganenko, }
{ Fast Reports Inc. }
{ }
{******************************************}
unit frxChartEditor;
interface
{$I frx.inc}
{$I tee.inc}
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 Delphi11}
, TeeGalleryAlternate
{$ELSE}
, TeeGally
{$ENDIF}
{$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;
Panel2: TPanel;
ChartImages: TImageList;
CancelB: TButton;
SourcePanel: TPanel;
DataSourceGB: TGroupBox;
DBSourceRB: TRadioButton;
BandSourceRB: TRadioButton;
FixedDataRB: TRadioButton;
DatasetsCB: TComboBox;
DatabandsCB: TComboBox;
ValuesGB: TGroupBox;
Values1CB: TComboBox;
Values1L: TLabel;
Values2L: TLabel;
Values2CB: TComboBox;
Values3L: TLabel;
Values3CB: TComboBox;
Values4L: TLabel;
Values4CB: TComboBox;
OptionsGB: TGroupBox;
ShowTopLbl: TLabel;
CaptionLbl: TLabel;
SortLbl: TLabel;
XLbl: TLabel;
TopNE: TEdit;
TopNCaptionE: TEdit;
SortCB: TComboBox;
UpDown1: TUpDown;
XTypeCB: TComboBox;
InspSite: TPanel;
Values5L: TLabel;
Values5CB: TComboBox;
HintL: TLabel;
Values6L: TLabel;
Values6CB: TComboBox;
Panel3: TPanel;
ChartTree: TTreeView;
TreePanel: TPanel;
AddB: TSpeedButton;
DeleteB: TSpeedButton;
EditB: TSpeedButton;
UPB: TSpeedButton;
DownB: TSpeedButton;
procedure FormShow(Sender: TObject);
procedure ChartTreeClick(Sender: TObject);
procedure AddBClick(Sender: TObject);
procedure DeleteBClick(Sender: TObject);
procedure DoClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure UpDown1Click(Sender: TObject; Button: TUDBtnType);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DatasetsCBClick(Sender: TObject);
procedure DatabandsCBClick(Sender: TObject);
procedure DBSourceRBClick(Sender: TObject);
procedure OkBClick(Sender: TObject);
procedure EditBClick(Sender: TObject);
procedure ChartTreeEdited(Sender: TObject; Node: TTreeNode;
var S: String);
procedure ChartTreeEditing(Sender: TObject; Node: TTreeNode;
var AllowEdit: Boolean);
procedure UPBClick(Sender: TObject);
procedure DownBClick(Sender: TObject);
private
{ Private declarations }
FChart: TfrxChartView;
FCurSeries: TfrxSeriesItem;
FInspector: TfrxObjectInspector;
FModified: Boolean;
FReport: TfrxReport;
FUpdating: Boolean;
FValuesGBHeight: Integer;
procedure FillDropDownLists(ds: TfrxDataset);
procedure SetCurSeries(const Value: TfrxSeriesItem);
procedure SetModified(const Value: Boolean);
procedure ShowSeriesData;
procedure UpdateSeriesData;
property Modified: Boolean read FModified write SetModified;
property CurSeries: TfrxSeriesItem read FCurSeries write SetCurSeries;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property Chart: TfrxChartView read FChart write FChart;
end;
implementation
uses frxDsgnIntf, frxUtils, frxRes, frxChartHelpers
{$IFDEF TeeChartPro}, TeeEdit{$IFNDEF TeeChart4}, TeeEditCha{$ENDIF} {$ENDIF};
{$R *.DFM}
type
THackWinControl = class(TWinControl);
{ 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);
var
bmp: TBitmap;
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;
{$IFDEF UseTabset}
ChartTree.BevelKind := bkFlat;
{$ELSE}
ChartTree.BorderStyle := bsSingle;
{$ENDIF}
{ add chart image }
bmp := TBitmap.Create;
bmp.Width := 24;
bmp.Height := 24;
frxResources.ObjectImages.Draw(bmp.Canvas, 0, 0, 25);
frxAssignImages(bmp, 24, 24, ChartImages);
bmp.Free;
FValuesGBHeight := ValuesGB.Height;
{$IFDEF TeeChartPro}
EditB.Visible := True;
{$ENDIF}
end;
destructor TfrxChartEditorForm.Destroy;
begin
FChart.Free;
inherited;
end;
procedure TfrxChartEditorForm.FormShow(Sender: TObject);
procedure FillChartTree;
var
i: Integer;
n: TTreeNode;
begin
for i := 0 to FChart.Chart.SeriesCount - 1 do
begin
n := ChartTree.Items.AddChild(ChartTree.Items[0], GetGallerySeriesName(FChart.Chart.Series[i]) + ' - ' + FChart.Chart.Series[i].Name);
n.ImageIndex := 0;
n.SelectedIndex := 0;
n.StateIndex := 0;
end;
ChartTree.FullExpand;
ChartTree.Selected := ChartTree.Items[0];
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
FReport.GetDatasetList(DatasetsCB.Items);
FillBandsList;
FillChartTree;
CurSeries := nil;
Constraints.MinWidth := Width;
Constraints.MinHeight := Height;
Constraints.MaxHeight := Height;
end;
procedure TfrxChartEditorForm.ShowSeriesData;
var
Helper: TfrxSeriesHelper;
sl: TStrings;
NewHeight: Integer;
begin
FUpdating := True;
if FCurSeries <> nil then
with FCurSeries do
begin
if DataType = dtDBData then
DBSourceRB.Checked := True
else if DataType = dtBandData then
BandSourceRB.Checked := True
else if DataType = dtFixedData then
FixedDataRB.Checked := True;
Values1CB.Text := FCurSeries.Source1;
Values2CB.Text := FCurSeries.Source2;
Values3CB.Text := FCurSeries.Source3;
Values4CB.Text := FCurSeries.Source4;
Values5CB.Text := FCurSeries.Source5;
Values6CB.Text := FCurSeries.Source6;
Helper := frxFindSeriesHelper(FChart.Chart.Series[FCurSeries.Index]);
sl := TStringList.Create;
frxSetCommaText(Helper.GetParamNames, sl);
NewHeight := FValuesGBHeight;
Values2CB.Visible := sl.Count >= 2;
Values2L.Visible := sl.Count >= 2;
if not Values2CB.Visible then
Dec(NewHeight, Values2CB.Height + 4);
Values3CB.Visible := sl.Count >= 3;
Values3L.Visible := sl.Count >= 3;
if not Values3CB.Visible then
Dec(NewHeight, Values3CB.Height + 4);
Values4CB.Visible := sl.Count >= 4;
Values4L.Visible := sl.Count >= 4;
if not Values4CB.Visible then
Dec(NewHeight, Values4CB.Height + 4);
Values5CB.Visible := sl.Count >= 5;
Values5L.Visible := sl.Count >= 5;
if not Values5CB.Visible then
Dec(NewHeight, Values5CB.Height + 4);
Values6CB.Visible := sl.Count >= 6;
Values6L.Visible := sl.Count >= 6;
if not Values6CB.Visible then
Dec(NewHeight, Values6CB.Height + 4);
ValuesGB.Height := NewHeight;
OptionsGB.Top := ValuesGB.Top + ValuesGB.Height + 8;
if sl.Count > 0 then
Values1L.Caption := sl[0];
if sl.Count > 1 then
Values2L.Caption := sl[1];
if sl.Count > 2 then
Values3L.Caption := sl[2];
if sl.Count > 3 then
Values4L.Caption := sl[3];
if sl.Count > 4 then
Values5L.Caption := sl[4];
if sl.Count > 5 then
Values6L.Caption := sl[5];
sl.Free;
Helper.Free;
if DataSet = nil then
DatasetsCB.ItemIndex := -1
else
begin
DatasetsCB.ItemIndex := DatasetsCB.Items.IndexOf(FReport.GetAlias(DataSet));
DatasetsCBClick(nil);
end;
if DataBand = nil then
DatabandsCB.ItemIndex := -1
else
begin
DatabandsCB.ItemIndex := DatabandsCB.Items.IndexOf(DataBand.Name);
DatabandsCBClick(nil);
end;
TopNE.Text := IntToStr(TopN);
TopNCaptionE.Text := TopNCaption;
SortCB.ItemIndex := Integer(SortOrder);
XTypeCB.ItemIndex := Integer(XType);
end;
FUpdating := False;
end;
procedure TfrxChartEditorForm.UpdateSeriesData;
begin
if FCurSeries <> nil then
with FCurSeries do
begin
if DBSourceRB.Checked then
DataType := dtDBData
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -