📄 teeeditcha.pas
字号:
{**********************************************}
{ TCustomChart (or derived) Editor Dialog }
{ Copyright (c) 1996-2003 by David Berneda }
{**********************************************}
unit TeeEditCha;
{$I TeeDefs.inc}
interface
uses {$IFNDEF LINUX}
Windows, Messages,
{$ENDIF}
SysUtils, Classes,
{$IFDEF CLX}
QGraphics, QControls, QForms, QStdCtrls, QExtCtrls, QComCtrls, QButtons,
QDialogs, QGrids, QMenus, QTypes,
{$ELSE}
Graphics, Controls, Forms, StdCtrls, ExtCtrls, ComCtrls, Buttons,
Dialogs, Grids, Menus,
{$ENDIF}
Chart, TeEngine, TeeProcs, TeeEdiSeri, TeeLisB, TeeChartGrid, TeePrevi,
TeeNavigator;
Const teeEditMainPage =0;
teeEditGeneralPage =1;
teeEditAxisPage =2;
teeEditTitlePage =3;
teeEditLegendPage =4;
teeEditPanelPage =5;
teeEditPagingPage =6;
teeEditWallsPage =7;
teeEdit3DPage =8;
type
TChartEditorOption=( ceAdd,
ceDelete,
ceChange,
ceClone,
ceDataSource,
ceTitle,
ceHelp );
Const eoAll=[Low(TChartEditorOption)..High(TChartEditorOption)];
type
TChartEditorTab=( cetMain,
cetGeneral,
cetAxis,
cetTitles,
cetLegend,
cetPanel,
cetPaging,
cetWalls,
cet3D,
cetSeriesGeneral,
cetSeriesMarks,
cetAllSeries,
cetSeriesData,
cetExport,
cetTools,
cetPrintPreview
{$IFDEF TEEOCX}
,cetOpenGL
{$ENDIF}
);
TChartEditorOptions=set of TChartEditorOption;
TChartEditorHiddenTabs=set of TChartEditorTab;
TChartEditForm = class(TForm)
MainPage: TPageControl;
TabChart: TTabSheet;
SubPage: TPageControl;
TabSeriesList: TTabSheet;
TabAxis: TTabSheet;
TabGeneral: TTabSheet;
TabTitle: TTabSheet;
TabLegend: TTabSheet;
TabPanel: TTabSheet;
TabPaging: TTabSheet;
TabWalls: TTabSheet;
TabSeries: TTabSheet;
Tab3D: TTabSheet;
LBSeries: TChartListBox;
TabData: TTabSheet;
TabExport: TTabSheet;
PanBottom: TPanel;
LabelWWW: TLabel;
ButtonHelp: TButton;
TabTools: TTabSheet;
TabPrint: TTabSheet;
PanRight: TPanel;
BMoveUP: TSpeedButton;
BMoveDown: TSpeedButton;
BAddSeries: TButton;
BDeleteSeries: TButton;
BRenameSeries: TButton;
BCloneSeries: TButton;
BChangeTypeSeries: TButton;
PanTop: TPanel;
PanBot: TPanel;
PanLeft: TPanel;
PanClose: TPanel;
BClose: TButton;
ChartGrid1: TChartGrid;
Panel1: TPanel;
ChartGridNavigator1: TChartGridNavigator;
Panel2: TPanel;
SBGridText: TSpeedButton;
SBGridCol: TSpeedButton;
SBGrid3D: TSpeedButton;
SBGridX: TSpeedButton;
PopupData: TPopupMenu;
Deleterow1: TMenuItem;
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SubPageChange(Sender: TObject);
procedure BCloseClick(Sender: TObject);
procedure BMoveUPClick(Sender: TObject);
procedure BMoveDownClick(Sender: TObject);
procedure BAddSeriesClick(Sender: TObject);
procedure BDeleteSeriesClick(Sender: TObject);
procedure BRenameSeriesClick(Sender: TObject);
procedure BCloneSeriesClick(Sender: TObject);
procedure MainPageChange(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure LBSeriesEditSeries(Sender: TChartListBox; Index: Integer);
procedure LBSeriesOtherItemsChange(Sender: TObject);
procedure LBSeriesRefreshButtons(Sender: TObject);
procedure BChangeTypeSeriesClick(Sender: TObject);
procedure LabelWWWClick(Sender: TObject);
procedure ButtonHelpClick(Sender: TObject);
procedure MainPageChanging(Sender: TObject; var AllowChange: Boolean);
procedure SubPageChanging(Sender: TObject; var AllowChange: Boolean);
procedure SBGridTextClick(Sender: TObject);
procedure SBGridColClick(Sender: TObject);
procedure SBGrid3DClick(Sender: TObject);
procedure SBGridXClick(Sender: TObject);
procedure ChartGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: String);
procedure Deleterow1Click(Sender: TObject);
private
{ Private declarations }
TheChart : TCustomChart;
FPreview : TChartPreview;
procedure AxisNotifyCustom(Sender: TObject); // 6.01
procedure SetChart(Value:TCustomChart);
procedure GridMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
protected
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
{$IFNDEF CLX}
procedure WMHelp(var Message: TWMHelp); message WM_HELP;
{$ENDIF}
public
{ Public declarations }
TheAxis : TChartAxis;
TheTitle : TChartTitle;
TheTool : TTeeCustomTool;
TheWall : TChartWall;
TheSeries : TChartSeries;
TheEditSeries : TChartSeries;
TheActivePageIndex : Integer;
TheHiddenTabs : TChartEditorHiddenTabs;
EditorOptions : TChartEditorOptions;
IsDssGraph : Boolean;
TheFormSeries : TFormTeeSeries;
HighLightTabs : Boolean;
RememberPosition : Boolean;
Procedure CheckHelpFile;
procedure SetTabSeries;
property Chart : TCustomChart read TheChart write SetChart;
end;
Function GetTeeChartHelpFile:String;
type TTeeOnShowEditor=Procedure(Editor:TChartEditForm);
var TeeOnShowEditor:TTeeOnShowEditor=nil;
implementation
{$IFNDEF CLX}
{$R *.DFM}
{$ELSE}
{$R *.xfm}
{$ENDIF}
uses {$IFNDEF LINUX}
Registry,
{$ENDIF}
TeePenDlg, TeeConst, Series, TeExport, TeeExport, TeeFunci,
TeeEdiAxis, TeeEdiLege, TeeEdiPane, TeeEdiTitl, TeeEdiWall, TeeEdiGene,
TeeEdiPage, TeeEdi3D, TeeEditTools, TeeAbout,
Math, TeCanvas;
Function GetTeeChartHelpFile:String;
begin
result:=GetRegistryHelpPath(
{$IFDEF TEEOCX}
'TeeChartX'+TeeChartVersion+'.hlp'
{$ELSE}
'TeeChart'+TeeChartVersion+'.hlp'
{$ENDIF}); // <- do not translate
end;
Function GetTeeChartUserHelpFile:String;
begin
result:=GetRegistryHelpPath(
{$IFDEF TEEOCX}
'TeeUserX'+TeeChartVersion+'.hlp'
{$ELSE}
'TeeUser'+TeeChartVersion+'.hlp'
{$ENDIF}); // <- do not translate
end;
{ TChartEditForm }
Procedure TChartEditForm.CheckHelpFile;
begin
if ceHelp in EditorOptions then
begin
if csDesigning in Chart.ComponentState then
HelpFile:=GetTeeChartHelpFile
else
HelpFile:=GetTeeChartUserHelpFile;
if HelpFile<>'' then BorderIcons:=BorderIcons+[biHelp];
end
else HelpFile:='';
ButtonHelp.Visible:=ceHelp in EditorOptions;
end;
procedure TChartEditForm.FormShow(Sender: TObject);
Procedure HideTabs;
Const Margin=26;
HorizMargin=10;
HorizButtonMargin=5;
begin
if cetMain in TheHiddenTabs then TabSeriesList.TabVisible:=False;
if cetGeneral in TheHiddenTabs then TabGeneral.TabVisible:=False;
if cetAxis in TheHiddenTabs then TabAxis.TabVisible:=False;
if cetTitles in TheHiddenTabs then TabTitle.TabVisible:=False;
if cetLegend in TheHiddenTabs then TabLegend.TabVisible:=False;
if cetPanel in TheHiddenTabs then TabPanel.TabVisible:=False;
if cetPaging in TheHiddenTabs then TabPaging.TabVisible:=False;
if cetWalls in TheHiddenTabs then TabWalls.TabVisible:=False;
if cet3D in TheHiddenTabs then Tab3D.TabVisible:=False;
if cetSeriesData in TheHiddenTabs then TabData.TabVisible:=False;
if cetExport in TheHiddenTabs then TabExport.TabVisible:=False;
if cetTools in TheHiddenTabs then TabTools.TabVisible:=False;
if cetPrintPreview in TheHiddenTabs then TabPrint.TabVisible:=False;
if cetAllSeries in TheHiddenTabs then
begin
SubPage.Parent:=Self;
MainPage.Visible:=False;
Height:=Height-Margin;
Width:=Width-HorizMargin;
end;
end;
var t : Integer;
St : String;
tmp : Boolean;
begin
TeeLoadArrowBitmaps(BMoveUp.Glyph,BMoveDown.Glyph);
if TeeIsTrial then
LabelWWW.Cursor:=crHandPoint
else
LabelWWW.Visible:=False;
if TeeToolTypes.Count=0 then TabTools.TabVisible:=False;
LBSeries.Chart:=Chart;
if (Caption='') and Assigned(Chart) then
begin
FmtStr(St,TeeMsg_Editing,[Chart.Name]);
Caption:=St;
end;
HideTabs;
if TheActivePageIndex<>-1 then
Case TChartEditorTab(TheActivePageIndex) of
cetSeriesData : begin MainPage.ActivePage:=TabData; MainPageChange(Self); end;
cetExport : begin MainPage.ActivePage:=TabExport; MainPageChange(Self); end;
cetTools : begin MainPage.ActivePage:=TabTools; MainPageChange(Self); end;
cetPrintPreview : begin MainPage.ActivePage:=TabPrint; MainPageChange(Self); end;
else
begin
if TheActivePageIndex<=teeEdit3DPage then // 5.01
begin
t:=TheActivePageIndex;
While not SubPage.Pages[t].TabVisible do
if t<(SubPage.PageCount-1) then // 5.03
Inc(t)
else
begin
t:=TheActivePageIndex;
While not SubPage.Pages[t].TabVisible do
if t>0 then
Dec(t)
else
Break;
end;
TheActivePageIndex:=t;
if SubPage.Pages[TheActivePageIndex].TabVisible then
begin
SubPage.ActivePage:=SubPage.Pages[TheActivePageIndex];
SubPageChange(Self);
end;
end;
end;
end;
if Assigned(TeeOnShowEditor) then TeeOnShowEditor(Self);
if Assigned(TheEditSeries) then
begin
LBSeries.SelectedSeries:=TheEditSeries;
LBSeriesEditSeries(LBSeries,0);
end
else
if Assigned(TheTool) and TabTools.TabVisible then
begin
MainPage.ActivePage:=TabTools;
MainPageChange(Self);
end
else
if LBSeries.Items.Count>0 then
begin
if LBSeries.CanFocus then
LBSeries.SetFocus; // 5.03 CLX fix (unless fails to set ItemIndex)
LBSeries.ItemIndex:=0;
if LBSeries.MultiSelect then LBSeries.Selected[0]:=True; { 5.01 }
LBSeriesRefreshButtons(LBSeries);
end;
Case TChartEditorTab(TheActivePageIndex) of
cetSeriesGeneral,
cetSeriesMarks : begin
LBSeriesEditSeries(LBSeries,LBSeries.ItemIndex);
with TheFormSeries do
begin
tmp:=True;
PageSeriesChanging(PageSeries,tmp);
if TChartEditorTab(TheActivePageIndex)=cetSeriesGeneral then
PageSeries.ActivePage:=TabGeneral
else
PageSeries.ActivePage:=TabMarks;
PageSeriesChange(PageSeries);
end;
end;
end;
end;
procedure TChartEditForm.FormCreate(Sender: TObject);
Function AdjustSize(const Value:String):Integer;
Const PPI={$IFDEF LINUX}75{$ELSE}{$IFDEF CLX}92{$ELSE}96{$ENDIF}{$ENDIF};
begin
result:=StrToInt(Value)*Screen.PixelsPerInch div PPI; { 5.03 }
end;
var tmpH : Integer;
begin
Width:=AdjustSize(TeeMsg_DefaultEditorSize);
tmpH:=AdjustSize(TeeMsg_DefaultEditorHeight);
{$IFNDEF LINUX}
Inc(tmpH,GetSystemMetrics(SM_CYSIZE)-18); // add big (XP) form caption size
{$ENDIF}
Height:=tmpH;
RememberPosition:=False;
Chart:=nil;
Caption:='';
TheActivePageIndex:=-1;
EditorOptions:=eoAll;
MainPage.ActivePage:=TabChart;
SubPage.ActivePage:=TabSeriesList;
TheHiddenTabs:=[{$IFDEF TEEOCX}cetOpenGL{$ENDIF}]; { 5.02 }
end;
procedure TChartEditForm.AxisNotifyCustom(Sender: TObject); // 6.01
begin
if Assigned(TheFormSeries) then
TheFormSeries.FillAxes;
end;
procedure TChartEditForm.SubPageChange(Sender: TObject);
var tmpForm : TForm;
tmpSeries : TChartSeries;
begin
{$IFDEF D5}
if HighLightTabs then SubPage.ActivePage.Highlighted:=True;
{$ENDIF}
if Assigned(Chart) then
With SubPage.ActivePage do
if ControlCount=0 then
begin
Case {$IFNDEF CLX}PageIndex{$ELSE}TabIndex{$ENDIF} of
teeEditGeneralPage: tmpForm:=TFormTeeGeneral.CreateChart(Self,Chart);
teeEditAxisPage : begin
if not Assigned(TheAxis) then TheAxis:=Chart.LeftAxis;
tmpForm:=TFormTeeAxis.CreateAxis(Self,TheAxis);
TFormTeeAxis(tmpForm).NotifyCustom:=AxisNotifyCustom; // 6.01
end;
teeEditTitlePage : begin
if not Assigned(TheTitle) then TheTitle:=Chart.Title;
tmpForm:=TFormTeeTitle.CreateTitle(Self,Chart,TheTitle);
end;
teeEditLegendPage : tmpForm:=TFormTeeLegend.CreateLegend(Self,Chart.Legend);
teeEditPanelPage : tmpForm:=TFormTeePanel.CreatePanel(Self,Chart);
teeEditPagingPage : tmpForm:=TFormTeePage.CreateChart(Self,Chart);
teeEditWallsPage : begin
if not Assigned(TheWall) then TheWall:=Chart.LeftWall;
tmpForm:=TFormTeeWall.CreateWall(Self,TheWall);
end;
else
tmpForm:=TFormTee3D.CreateChart(Self,Chart);
end;
{ show the form... }
With tmpForm do
begin
BorderIcons:=[];
BorderStyle:=TeeFormBorderStyle;
Align:=alClient;
Parent:=Self.SubPage.ActivePage;
{$IFDEF CLX}
TeeFixParentedForm(tmpForm);
{$ENDIF}
Show;
Realign; // 6.0 (fixes Axis tab align bug in VCL)
end;
// Translate the form
TeeTranslateControl(tmpForm);
end;
if SubPage.ActivePage=Tab3D then
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -