📄 teeediseri.pas
字号:
tmpList:=FindZList;
CBZDateTime.Visible:=Assigned(tmpList);
if CBZDateTime.Visible then
CBZDateTime.Checked:=tmpList.DateTime;
Case MandatoryValueList.Order of
loNone : CBSort.ItemIndex:= 2;
loAscending : CBSort.ItemIndex:= 0;
loDescending : CBSort.ItemIndex:= 1;
end;
ShowControls(ValuesList.Count<=2,[CBSort,LSort,LDepth,EDepth,UDDepth,CBDepth]);
tmpCursor:=Cursor;
end
else tmpCursor:=crDefault;
TeeFillCursors(CBCursor,tmpCursor);
end;
begin
With PageSeries do
if ActivePage=TabGeneral then SetTabSeriesGeneral else
if ActivePage=TabMarks then SetTabSeriesMarks else
if ActivePage=TabDataSource then SetTabDataSource;
ChangingPage:=False;
end;
Procedure TFormTeeSeries.FillAxes;
begin
FillAxis(CBHorizAxis.Items,True);
FillAxis(CBVertAxis.Items,False);
end;
type
TChartSeriesAccess=class(TChartSeries);
procedure TFormTeeSeries.SetTabDataSource;
var tmp : Integer;
t : Integer;
tmpSource : TTeeSeriesSourceClass;
begin
{$IFDEF CLX}
if not Assigned(TheSeries) then exit;
{$ENDIF}
tmp:=CBDataSourceStyle.ItemIndex;
if Assigned(TheSeries.FunctionType) then
CBDataSourceStyle.ItemIndex:=3
else
if not Assigned(TheSeries.DataSource) then
begin
if (TheSeries.Count>0) and (not TChartSeriesAccess(TheSeries).ManualData) then
CBDataSourceStyle.ItemIndex:=1
else
CBDataSourceStyle.ItemIndex:=0;
end
else
if TheSeries.DataSource is TChartSeries then
CBDataSourceStyle.ItemIndex:=2
else
begin
tmpSource:=nil;
for t:=0 to TeeSources.Count-1 do
if TTeeSeriesSourceClass(TeeSources[t]).HasSeries(TheSeries) then
begin
tmpSource:=TTeeSeriesSourceClass(TeeSources[t]);
break;
end;
With CBDataSourceStyle do
if Assigned(tmpSource) then
ItemIndex:=Items.IndexOfObject(TObject(tmpSource))
else
ItemIndex:=0;
end;
if CBDataSourceStyle.ItemIndex<>tmp then
CreateDataSourceForm;
end;
Function TFormTeeSeries.AddToTab(AForm:TForm; ATab:TTabSheet; AObject:TPersistent):TForm;
begin
result:=AForm;
result.Align:=alClient;
TeeTranslateControl(result);
AddFormTo(result,ATab,AObject);
end;
class function TFormTeeSeries.InsertSeriesForm(AParent:TControl;
EditorClass:TFormClass;
Position:Integer;
Const EditorTabName:String;
AnObject:TPersistent):TCustomForm;
var tmpPage : TTabSheet;
begin
if Assigned(AParent) and Assigned(AParent.Owner) and
(AParent.Owner is TFormTeeSeries) then
begin
tmpPage:=TTabSheet.Create(AParent.Owner);
With tmpPage do
begin
PageControl:=TFormTeeSeries(AParent.Owner).PageSeries;
PageIndex:=Position;
Caption:=EditorTabName;
end;
result:=TFormTeeSeries(AParent.Owner).AddToTab(EditorClass.Create(AParent.Owner),tmpPage,AnObject);
end
else
begin
result:=EditorClass.Create(AParent);
result.Caption:=EditorTabName;
result.Tag:={$IFDEF CLR}Variant{$ELSE}Integer{$ENDIF}(AnObject);
end;
end;
{$IFNDEF CLR}
type
TTeePanelAccess=class(TCustomTeePanel);
{$ENDIF}
procedure TFormTeeSeries.DestroySeriesForms;
var t : Integer;
tmpPage : TTabSheet;
begin
while TheTabSheet.ControlCount>0 do
TheTabSheet.Controls[0].Free;
t:=0;
while t<PageSeries.PageCount do
begin
tmpPage:=PageSeries.Pages[t];
if (tmpPage<>TheTabSheet) and (tmpPage<>TabGeneral) and
(tmpPage<>TabMarks) and (tmpPage<>TabDataSource) then
begin
while tmpPage.ControlCount>0 do
tmpPage.Controls[0].Free;
if (tmpPage.PageIndex>0) and
(not (csDestroying in tmpPage.PageControl.ComponentState)) and
(not (csDestroying in tmpPage.ComponentState)) then
tmpPage.Free
else
Inc(t);
end
else Inc(t);
end;
DestroyDataSourceForm;
end;
Function SeriesEditorForm(Series:TChartSeries):TFormClass;
begin
result:=TFormClass(GetClass(Series.EditorClass));
end;
procedure TFormTeeSeries.CBSeriesChange(Sender: TObject);
Procedure CreateTheSeriesForm;
var tmpClass : TFormClass;
begin
tmpClass:=SeriesEditorForm(TheSeries);
if Assigned(tmpClass) then
AddToTab(tmpClass.Create(Self),TheTabSheet,TheSeries)
else
begin
DestroySeriesForms;
TheTabSheet.TabVisible:=False;
end;
end;
Procedure HideSeriesPage;
begin
ImageSeries.Visible:=False;
LabelSeriesClass.Caption:='';
PageSeries.Visible:=False;
end;
Function FindTab(Const ATab:String):TTabSheet;
var t : Integer;
begin
with PageSeries do
begin
result:=nil;
for t:=0 to PageCount-1 do
if Pages[t].Caption=ATab then
begin
result:=Pages[t];
break;
end;
end;
end;
Procedure AddTeeSources;
var t: Integer;
tmpSource : TTeeSeriesSourceClass;
begin
{ remove source styles from combobox }
with CBDataSourceStyle.Items do
while Count>4 do Delete(Count-1);
{ add sources that are available for this chart type }
for t:=0 to TeeSources.Count-1 do { 5.02 }
begin
tmpSource:=TTeeSeriesSourceClass(TeeSources[t]);
if CBDataSourceStyle.Items.IndexOfObject(TObject(tmpSource))=-1 then
if tmpSource.Available(TheSeries.ParentChart) then
CBDataSourceStyle.Items.AddObject(tmpSource.Description,TObject(tmpSource));
end;
end;
procedure ChangeSeriesForms(OldTab:String);
const
MenuShortCut='&'; // Do not localize
var tmpBitmap : TBitmap;
tmpString : string;
Index: Integer;
begin
TheChart:=TheSeries.ParentChart;
if Assigned(TheChart) then
{$IFNDEF CLR}TTeePanelAccess{$ENDIF}(TheChart).Listeners.Add(Self);
AddTeeSources;
tmpBitmap:=TBitmap.Create;
try
TeeGetBitmapEditor(TheSeries,tmpBitmap);
ImageSeries.Picture.Assign(tmpBitmap);
finally
tmpBitmap.Free;
end;
PaintBox1.Visible:=TChartSeriesAccess(TheSeries).IUseSeriesColor;
tmpString := GetGallerySeriesName(TheSeries);
// Example: Replace "Point & Figure" with --> "Point && Figure"
Index := Pos(MenuShortCut, tmpString);
if Index > 0 then
Insert(MenuShortCut, tmpString, Index + 1);
LabelSeriesClass.Caption:=tmpString+': '+SeriesTitleOrName(TheSeries); // Do not localize
ImageSeries.Visible:=True;
PageSeries.Visible:=True;
TabGeneral.TabVisible:=ShowTabGeneral;
TabMarks.TabVisible:=ShowTabMarks;
TabDataSource.TabVisible:=ShowTabDataSource and
( (not (tssIsTemplate in TheSeries.Style)) and
(not (tssHideDataSource in TheSeries.Style)) );
if (OldTab='') or
((OldTab=TabDataSource.Caption) and (not TabDataSource.TabVisible)) then
OldTab:=TheTabSheet.Caption;
ShowControls(TheSeries.UseAxis,[ GBHorizAxis,GBVertAxis ]);
CBPersistent.Visible:=IsDssGraph and (not (tssIsTemplate in TheSeries.Style));
if CBPersistent.Visible then
CBPersistent.Checked:=(tssIsPersistent in TheSeries.Style);
DestroySeriesForms;
CreateTheSeriesForm;
PageSeries.ActivePage:=FindTab(OldTab);
if (OldTab='') or (PageSeries.ActivePage=nil) then
PageSeries.ActivePage:=TheTabSheet;
if not PageSeries.ActivePage.TabVisible then
PageSeries.ActivePage:=TabGeneral;
CBDataSourceStyle.ItemIndex:=-1;
PageSeriesChange(Self);
PaintBox1.Repaint; { 5.02 }
end;
var OldTab : String;
begin
CreatingForm:=True;
if Assigned(PageSeries.ActivePage) then OldTab:=PageSeries.ActivePage.Caption
else OldTab:='';
With CBSeries do
if ItemIndex<>-1 then
begin
TheSeries:=TChartSeries(SelectedObject);
if Assigned(TheSeries) then
begin
if Assigned(TheListBox) then
begin
TheListBox.ClearSelection;
TheListBox.SelectedSeries:=TheSeries; // 6.0 Synchronize main ChartListBox
end;
if TheSeries<>LastSeries then
begin
ChangeSeriesForms(OldTab);
LastSeries:=TheSeries;
end;
end
else HideSeriesPage;
end
else HideSeriesPage;
CreatingForm:=False;
end;
procedure TFormTeeSeries.FormCreate(Sender: TObject);
begin
ChangingPage:=False;
CreatingForm:=True;
ShowTabDataSource:=True;
ShowTabGeneral:=True;
ShowTabMarks:=True;
IsDssGraph:=False;
CBDataSourceStyle.DropDownCount:=12; { 5.02 }
CBDataSourceStyle.Items.Objects[3]:=TObject(TTeeFuncEditor); { 5.02 }
PageSeries.ActivePage:=TheTabSheet;
PageControlMarks.ActivePage:=TabSheet1;
end;
procedure TFormTeeSeries.RGMarkStyleClick(Sender: TObject);
begin
TheSeries.Marks.Style:=TSeriesMarksStyle(RGMarkStyle.ItemIndex);
EnableMultiLine;
end;
procedure TFormTeeSeries.CBPersistentClick(Sender: TObject);
begin
With TheSeries do
if CBPersistent.Checked then Style:=Style+[tssIsPersistent]
else Style:=Style-[tssIsPersistent];
end;
procedure TFormTeeSeries.CBYDateTimeClick(Sender: TObject);
begin
if Assigned(TheSeries) then
TheSeries.YValues.DateTime:=CBYDateTime.Checked;
end;
procedure TFormTeeSeries.CBXDateTimeClick(Sender: TObject);
begin
if Assigned(TheSeries) then
TheSeries.XValues.DateTime:=CBXDateTime.Checked;
end;
procedure TFormTeeSeries.CBDataSourcestyleChange(Sender: TObject);
Procedure CheckOldSource;
var tmpSource : TTeeSeriesSource;
begin
{ if the datasource is an internal "Series Source",
remove and free it ! }
if Assigned(TheSeries.DataSource) and
(TheSeries.DataSource is TTeeSeriesSource) and
(TheSeries.DataSource.Owner=TheSeries) then
begin
tmpSource:=TTeeSeriesSource(TheSeries.DataSource);
tmpSource.Series:=nil;
tmpSource.Free;
TheSeries.DataSource:=nil;
TheSeries.Clear;
end;
TheSeries.SetFunction(nil);
end;
begin
if Assigned(DataSourceStyle) then
DataSourceStyle.BApply.Enabled:=False;
{ change datasource form }
Case CBDataSourceStyle.ItemIndex of
0: begin // Manual data. No source.
CheckOldSource;
TChartSeriesAccess(TheSeries).ManualData:=True;
end;
1: CheckOldSource; // Random values.
end;
CreateDataSourceForm;
end;
procedure TFormTeeSeries.DestroyDataSourceForm;
begin
if Assigned(DataSourceStyle) and DataSourceStyle.CloseQuery then
FreeAndNil(DataSourceStyle);
end;
procedure TFormTeeSeries.CreateDataSourceForm;
Procedure EnableButton(AButton:TButton);
begin
AButton.Visible:=Assigned(AButton.OnClick);
end;
var tmpForm : TCustomForm;
tmpSource : TTeeSeriesSourceClass;
tmpNum : Integer;
begin
DestroyDataSourceForm;
if not Assigned(DataSourceStyle) then
begin
NewDataButton.Visible:=False;
EditDataButton.Visible:=False;
DeleteDataButton.Visible:=False;
ChartGrid1.Visible:=False;
ChartGridNavigator1.Visible:=False;
PanelRandomSource.Visible:=False;
PanelSeriesSource.Visible:=False;
case CBDataSourceStyle.ItemIndex of
0: begin
ChartGrid1.Chart:=TCustomChart(TheSeries.ParentChart);
ChartGrid1.Series:=TheSeries;
ChartGrid1.Visible:=True;
ChartGridNavigator1.Visible:=True;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -