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 + -
显示快捷键?