teeediseri.pas
来自「Delphi TeeChartPro.6.01的源代码」· PAS 代码 · 共 1,024 行 · 第 1/2 页
PAS
1,024 行
if Assigned(PageSeries.ActivePage) then OldTab:=PageSeries.ActivePage.Caption
else OldTab:='';
With CBSeries do
if ItemIndex<>-1 then
begin
TheSeries:=TChartSeries(Items.Objects[ItemIndex]);
if Assigned(TheSeries) then
begin
TheListBox.ClearSelection;
TheListBox.SelectedSeries:=TheSeries; // 6.0 Synchronize main ChartListBox
if TheSeries<>LastSeries then
begin
TheChart:=TheSeries.ParentChart;
if Assigned(TheChart) then
TTeePanelAccess(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;
LabelSeriesClass.Caption:=GetGallerySeriesName(TheSeries)+': '+
SeriesTitleOrName(TheSeries);
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 }
LastSeries:=TheSeries;
end;
end
else HideSeriesPage;
end
else HideSeriesPage;
CreatingForm:=False;
end;
procedure TFormTeeSeries.FormCreate(Sender: TObject);
begin
ChangingPage:=False;
CreatingForm:=True;
NumSeriesForms:=0;
ShowTabDataSource:=True;
ShowTabGeneral:=True;
ShowTabMarks:=True;
IsDssGraph:=False;
CBDataSourceStyle.DropDownCount:=12; { 5.02 }
CBDataSourceStyle.Items.Objects[2]:=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
TheSeries.YValues.DateTime:=CBYDateTime.Checked;
end;
procedure TFormTeeSeries.CBXDateTimeClick(Sender: TObject);
begin
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;
if CBDataSourceStyle.ItemIndex=0 then
begin
ChartGrid1.Chart:=TCustomChart(TheSeries.ParentChart);
ChartGrid1.Series:=TheSeries;
ChartGrid1.Visible:=True;
ChartGridNavigator1.Visible:=True;
end;
Panel4.Visible:=False;
if CBDataSourceStyle.ItemIndex=1 then
begin
Panel4.Visible:=True;
tmpNum:=TChartSeriesAccess(TheSeries).INumSampleValues;
CheckCBSamples;
if tmpNum=0 then tmpNum:=TheSeries.NumSampleValues;
ESamples.Text:=IntToStr(tmpNum);
end
else
if CBDataSourceStyle.ItemIndex>1 then
begin
With CBDataSourceStyle do
if ItemIndex=2 then
tmpForm:=TFormClass(Items.Objects[2]).Create(Self)
else
begin
tmpSource:=TTeeSeriesSourceClass(Items.Objects[ItemIndex]);
if tmpSource.HasNew then
begin
EnableButton(NewDataButton);
EnableButton(EditDataButton);
EnableButton(DeleteDataButton);
end;
tmpForm:=TFormClass(tmpSource.Editor).Create(Self);
end;
DataSourceStyle:=TBaseSourceEditor(tmpForm);
DataSourceStyle.Align:=alClient;
AddFormTo(DataSourceStyle,Panel2,Integer(TheSeries));
// Hack.
Timer1.Enabled:=True;
end;
end;
end;
procedure TFormTeeSeries.CBShowInLegendClick(Sender: TObject);
begin
TheSeries.ShowInLegend:=CBShowInLegend.Checked;
end;
procedure TFormTeeSeries.CBCursorChange(Sender: TObject);
begin
with TheSeries do
Cursor:=TeeSetCursor(Cursor,CBCursor.Items[CBCursor.ItemIndex]);
end;
procedure TFormTeeSeries.SEArrowLengthChange(Sender: TObject);
begin
if CanModifySeries then
TheSeries.Marks.Callout.Length:=UDArrowsLength.Position;
end;
procedure TFormTeeSeries.CBMarkClipClick(Sender: TObject);
begin
TheSeries.Marks.Clip:=CBMarkClip.Checked;
end;
procedure TFormTeeSeries.CBMarksVisibleClick(Sender: TObject);
var Old : Boolean;
begin
TheSeries.Marks.Visible:=CBMarksVisible.Checked;
Old:=ChangingPage;
ChangingPage:=True;
CBAllVisible.Checked:=CBMarksVisible.Checked;
ChangingPage:=Old;
end;
procedure TFormTeeSeries.FormDestroy(Sender: TObject);
begin
DestroySeriesForms;
if Assigned(TheChart) then
TTeePanelAccess(TheChart).RemoveListener(Self);
end;
procedure TFormTeeSeries.FormShow(Sender: TObject);
begin
CreatingForm:=False;
if Assigned(InternalOnCreateEditSeries) and Assigned(TheSeries) then
InternalOnCreateEditSeries(Self,TCustomChart(TheSeries.ParentChart));
if Assigned(InternalOnCreateEditSeriesObj) and Assigned(TheSeries) then
InternalOnCreateEditSeriesObj(Self,TCustomChart(TheSeries.ParentChart));
end;
procedure TFormTeeSeries.SEMarksAngleChange(Sender: TObject);
begin
if CanModifySeries then
TheSeries.Marks.Angle:=UDMarksAngle.Position;
end;
procedure TFormTeeSeries.CBHorizAxisChange(Sender: TObject);
begin
With CBHorizAxis do
if ItemIndex<3 then
TheSeries.HorizAxis:=THorizAxis(ItemIndex)
else
begin
TheSeries.HorizAxis:=aCustomHorizAxis;
TheSeries.CustomHorizAxis:=TChartAxis(Items.Objects[ItemIndex]);
end;
end;
procedure TFormTeeSeries.CBVertAxisChange(Sender: TObject);
begin
With CBVertAxis do
if ItemIndex<3 then
TheSeries.VertAxis:=TVertAxis(ItemIndex)
else
begin
TheSeries.VertAxis:=aCustomVertAxis;
TheSeries.CustomVertAxis:=TChartAxis(Items.Objects[ItemIndex]);
end;
end;
procedure TFormTeeSeries.EMarksEveryChange(Sender: TObject);
begin
if CanModifySeries then // 5.02
TheSeries.Marks.DrawEvery:=UDEvery.Position;
end;
procedure TFormTeeSeries.CBMultiLineClick(Sender: TObject);
begin
TheSeries.Marks.MultiLine:=CBMultiLine.Checked;
end;
procedure TFormTeeSeries.CBSortChange(Sender: TObject);
begin // Change sorting order...
With TheSeries do
begin
NotMandatoryValueList.Order:=loNone;
if CBSort.ItemIndex=2 then MandatoryValueList.Order:=loNone
else
begin
if CBSort.ItemIndex=0 then MandatoryValueList.Order:=loAscending
else MandatoryValueList.Order:=loDescending;
CheckOrder;
end;
end;
end;
procedure TFormTeeSeries.CBFormatChange(Sender: TObject);
begin
TheSeries.ValueFormat:=LocalToDelphiFormat(CBFormat.Text);
end;
Function TFormTeeSeries.CheckCanClose:Boolean;
begin
if Assigned(DataSourceStyle) then result:=DataSourceStyle.CloseQuery
else result:=True;
end;
procedure TFormTeeSeries.PageSeriesChanging(Sender: TObject;
var AllowChange: Boolean);
begin
AllowChange:=CheckCanClose;
if Sender<>Owner then
ChangingPage:=AllowChange;
end;
procedure TFormTeeSeries.CBDepthClick(Sender: TObject);
begin
if CanModifySeries then
if CBDepth.Checked then TheSeries.Depth:=-1
else TheSeries.Depth:=UDDepth.Position;
end;
Function TFormTeeSeries.CanModifySeries:Boolean;
begin
result:=(not CreatingForm) and (not ChangingPage);
end;
procedure TFormTeeSeries.EDepthChange(Sender: TObject);
begin
if CanModifySeries then
begin
TheSeries.Depth:=UDDepth.Position;
CBDepth.Checked:=False;
end;
end;
procedure TFormTeeSeries.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
CanClose:=CheckCanClose;
end;
procedure TFormTeeSeries.CBAllVisibleClick(Sender: TObject);
var t : Integer;
begin
if CanModifySeries then
begin
With TheSeries.ParentChart do
for t:=0 to SeriesCount-1 do
Series[t].Marks.Visible:=CBAllVisible.Checked;
CBMarksVisible.Checked:=CBAllVisible.Checked;
end;
end;
procedure TFormTeeSeries.PaintBox1Paint(Sender: TObject);
begin
if Assigned(TheSeries) then
begin
with PaintBox1.Canvas do
begin
Brush.Style:=bsSolid;
Brush.Color:=PaintBox1.Color;
FillRect(PaintBox1.ClientRect);
end;
PaintSeriesLegend(TheSeries,PaintBox1.Canvas,PaintBox1.ClientRect);
end;
end;
procedure TFormTeeSeries.PaintBox1Click(Sender: TObject);
var tmp : TColor;
begin
if Assigned(TheSeries) then
begin
tmp:=TheSeries.SeriesColor;
if EditColorDialog(Self,tmp) then
begin
TheSeries.SeriesColor:=tmp;
PaintBox1.Repaint;
end;
end;
end;
procedure TFormTeeSeries.CBSamplesDefaultClick(Sender: TObject);
begin
if CBSamplesDefault.Checked then
begin
ESamples.Text:=IntToStr(TheSeries.NumSampleValues);
CBSamplesDefault.Enabled:=False;
end;
end;
procedure TFormTeeSeries.CheckCBSamples;
var tmpNum : Integer;
begin
tmpNum:=TChartSeriesAccess(TheSeries).INumSampleValues;
CBSamplesDefault.Checked:=(tmpNum=0) or (tmpNum=TheSeries.NumSampleValues);
CBSamplesDefault.Enabled:=not CBSamplesDefault.Checked;
end;
procedure TFormTeeSeries.ESamplesChange(Sender: TObject);
var tmpNum : Integer;
begin
tmpNum:=StrToIntDef(ESamples.Text,0);
TChartSeriesAccess(TheSeries).INumSampleValues:=tmpNum;
CheckCBSamples;
BApplyRandom.Enabled:=True;
end;
procedure TFormTeeSeries.BApplyRandomClick(Sender: TObject);
var tmpNum : Integer;
begin
tmpNum:=TChartSeriesAccess(TheSeries).INumSampleValues;
if tmpNum=0 then TheSeries.FillSampleValues
else TheSeries.FillSampleValues(tmpNum);
end;
procedure TFormTeeSeries.TeeEvent(Event:TTeeEvent);
begin
if not (csDestroying in ComponentState) then
if Event is TTeeSeriesEvent then
With TTeeSeriesEvent(Event) do
if Event=seChangeColor then PaintBox1.Invalidate
else
if (Event=seRemove) and (Series=TheSeries) then
begin
DestroySeriesForms;
TheSeries:=nil;
CBSeriesChange(Self);
end;
end;
procedure TFormTeeSeries.EArrowDistChange(Sender: TObject);
begin
if CanModifySeries then
TheSeries.Marks.Callout.Distance:=UDArrowDist.Position;
end;
procedure TFormTeeSeries.BCalloutPointerClick(Sender: TObject);
begin
EditSeriesPointer(Self,TheSeries.Marks.Callout);
end;
procedure TFormTeeSeries.CBHeadChange(Sender: TObject);
begin
if CanModifySeries then
TheSeries.Marks.Callout.ArrowHead:=TArrowHeadStyle(CBHead.ItemIndex);
end;
procedure TFormTeeSeries.Edit1Change(Sender: TObject);
begin
if CanModifySeries then
TheSeries.Marks.Callout.ArrowHeadSize:=UDHeadSize.Position;
end;
procedure TFormTeeSeries.ChartGrid1SetEditText(Sender: TObject; ACol,
ARow: Integer; const Value: String);
begin
if ChartGrid1.Series<>nil then
ChartGrid1.Series.RefreshSeries;
end;
procedure TFormTeeSeries.Timer1Timer(Sender: TObject);
begin
// Force pagecontrol to re-show again our tab with the correct controls on it.
// This must be done using a timer to delay until parent form is totally
// visible. Anybody knows a better solution?
Timer1.Enabled:=False;
{$IFNDEF CLX}
PageSeries.ActivePage:=nil;
PageSeries.ActivePage:=TabDataSource;
{$ENDIF}
end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?