⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 teeediseri.pas

📁 TeeChart7Source 控件
💻 PAS
📖 第 1 页 / 共 3 页
字号:
{**************************************************}
{  TCustomChartSeries (or derived) Editor Dialog   }
{  Copyright (c) 1996-2004 by David Berneda        }
{**************************************************}
unit TeeEdiSeri;
{$I TeeDefs.inc}

interface

uses {$IFNDEF LINUX}
     Windows, Messages,
     {$ENDIF}
     SysUtils, Classes,
     {$IFDEF CLX}
     QGraphics, QControls, QForms, QDialogs, QStdCtrls, QExtCtrls, QComCtrls,
     QButtons, QGrids, QTypes,
     {$ELSE}
     Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls, Buttons,
     Grids,
     {$ENDIF}
     {$IFDEF LINUX}
     Types,
     {$ENDIF}
     TeEngine, TeeCustomShapeEditor, TeeProcs, TeCanvas, TeePenDlg,
     Chart, TeeSourceEdit, TeeChartGrid, TeeNavigator, TeeLisB;

type
  TFormTeeSeries = class(TForm,ITeeEventListener)
    CBPersistent: TCheckBox;
    PageSeries: TPageControl;
    TheTabSheet: TTabSheet;
    TabGeneral: TTabSheet;
    GB5: TGroupBox;
    L27: TLabel;
    CBShowInLegend: TCheckBox;
    CBCursor: TComboFlat;
    GB2: TGroupBox;
    L15: TLabel;
    L21: TLabel;
    EPercentFormat: TEdit;
    TabMarks: TTabSheet;
    TabDataSource: TTabSheet;
    GBHorizAxis: TGroupBox;
    CBHorizAxis: TComboFlat;
    CBXDateTime: TCheckBox;
    GBVertAxis: TGroupBox;
    CBVertAxis: TComboFlat;
    CBYDateTime: TCheckBox;
    PageControlMarks: TPageControl;
    TabSheet1: TTabSheet;
    CBMarksVisible: TCheckBox;
    CBMarkClip: TCheckBox;
    L23: TLabel;
    SEMarksAngle: TEdit;
    UDMarksAngle: TUpDown;
    Label3: TLabel;
    EMarksEvery: TEdit;
    UDEvery: TUpDown;
    CBMultiLine: TCheckBox;
    LSort: TLabel;
    CBSort: TComboFlat;
    CBSeries: TComboFlat;
    ImageSeries: TImage;
    LabelSeriesClass: TLabel;
    Panel1: TPanel;
    CBFormat: TComboFlat;
    Panel2: TPanel;
    PanTop: TPanel;
    CBDataSourcestyle: TComboFlat;
    LDepth: TLabel;
    EDepth: TEdit;
    UDDepth: TUpDown;
    CBDepth: TCheckBox;
    CBAllVisible: TCheckBox;
    PaintBox1: TPaintBox;
    Panel3: TPanel;
    RGMarkStyle: TComboFlat;
    Label1: TLabel;
    NewDataButton: TButton;
    EditDataButton: TButton;
    DeleteDataButton: TButton;
    ChartGrid1: TChartGrid;
    ChartGridNavigator1: TChartGridNavigator;
    Panel4: TPanel;
    Label2: TLabel;
    ESamples: TEdit;
    CBSamplesDefault: TCheckBox;
    BApplyRandom: TButton;
    TabSheet2: TTabSheet;
    BMarkLinCol: TButtonPen;
    L32: TLabel;
    SEArrowLength: TEdit;
    UDArrowsLength: TUpDown;
    Label4: TLabel;
    EArrowDist: TEdit;
    UDArrowDist: TUpDown;
    BCalloutPointer: TButton;
    Label11: TLabel;
    CBHead: TComboFlat;
    Label12: TLabel;
    Edit1: TEdit;
    UDHeadSize: TUpDown;
    Timer1: TTimer;
    TabSymbol: TTabSheet;
    CBZDateTime: TCheckBox;
    Button1: TButton;
    Button2: TButton;
    procedure EPercentFormatChange(Sender: TObject);
    procedure PageSeriesChange(Sender: TObject);
    procedure CBSeriesChange(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure RGMarkStyleClick(Sender: TObject);
    procedure CBPersistentClick(Sender: TObject);
    procedure CBYDateTimeClick(Sender: TObject);
    procedure CBXDateTimeClick(Sender: TObject);
    procedure CBDataSourcestyleChange(Sender: TObject);
    procedure CBShowInLegendClick(Sender: TObject);
    procedure CBCursorChange(Sender: TObject);
    procedure SEArrowLengthChange(Sender: TObject);
    procedure CBMarkClipClick(Sender: TObject);
    procedure CBMarksVisibleClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure SEMarksAngleChange(Sender: TObject);
    procedure CBHorizAxisChange(Sender: TObject);
    procedure CBVertAxisChange(Sender: TObject);
    procedure EMarksEveryChange(Sender: TObject);
    procedure CBMultiLineClick(Sender: TObject);
    procedure CBSortChange(Sender: TObject);
    procedure CBFormatChange(Sender: TObject);
    procedure PageSeriesChanging(Sender: TObject;
      var AllowChange: Boolean);
    procedure CBDepthClick(Sender: TObject);
    procedure EDepthChange(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure CBAllVisibleClick(Sender: TObject);
    procedure PaintBox1Paint(Sender: TObject);
    procedure PaintBox1Click(Sender: TObject);
    procedure CBSamplesDefaultClick(Sender: TObject);
    procedure ESamplesChange(Sender: TObject);
    procedure BApplyRandomClick(Sender: TObject);
    procedure EArrowDistChange(Sender: TObject);
    procedure BCalloutPointerClick(Sender: TObject);
    procedure CBHeadChange(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure ChartGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
      const Value: String);
    procedure Timer1Timer(Sender: TObject);
    procedure CBZDateTimeClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
    TheChart        : TCustomAxisPanel;
    TheSeriesForms  : Array[1..4] of TForm;
    NumSeriesForms  : Integer;
    CreatingForm    : Boolean;
    ChangingPage    : Boolean;
    IMarksObject    : TFormTeeShape;
    IMarksSymbol    : TFormTeeShape;
    LastSeries      : TChartSeries;

    Function AddToTab(AForm:TForm; ATab:TTabSheet; AObject:TPersistent):TForm;
    Function AllSeriesMarksVisible:Boolean;
    Function CanModifySeries:Boolean;
    Function CheckCanClose:Boolean;
    procedure CheckCBSamples;
    procedure DestroyDataSourceForm;
    procedure EnableMultiLine;
    procedure FillAxis(Items:TStrings; Horizontal:Boolean);
    Function FindZList:TChartValueList;  // 7.0
    procedure SetTabDataSource;

  {$IFDEF CLR}
  protected
  {$ENDIF}
    procedure TeeEvent(Event: TTeeEvent);  { interface }

  protected
    procedure CreateDataSourceForm;
  public
    { Public declarations }
    TheSeries             : TChartSeries;
    IsDssGraph            : Boolean;
    ShowTabDataSource     : Boolean;
    ShowTabGeneral        : Boolean;
    ShowTabMarks          : Boolean;
    DataSourceStyle       : TBaseSourceEditor;
    TheListBox            : TChartListBox;

    procedure DestroySeriesForms;
    Procedure FillAxes;
    Function InsertSeriesForm( EditorClass:TFormClass;
                               Position:Integer;
                               Const EditorTabName:String;
                               AnObject:TPersistent):TCustomForm;
    class Function MarkSymbolsForm(AOwner: TComponent;
                              Symbol:TSeriesMarksSymbol;
                              AParent:TWinControl=nil):TFormTeeShape;
    Procedure SetCBSeries;
  end;

  { Used by TeeChart Pro ActiveX and TeeChartOffice }
  TOnCreateEditSeries=Procedure(Sender:TFormTeeSeries; AChart:TCustomChart);
  TOnCreateEditSeriesObj=Procedure(Sender:TFormTeeSeries; AChart:TCustomChart) of object;

var InternalOnCreateEditSeries:TOnCreateEditSeries=nil;
    InternalOnCreateEditSeriesObj:TOnCreateEditSeriesObj=nil;

Function SeriesEditorForm(Series:TChartSeries):TFormClass;

implementation

{$IFNDEF CLX}
{$R *.DFM}
{$ELSE}
{$R *.xfm}
{$ENDIF}

Uses TeeConst, TeeGally, TeeBrushDlg, TeeFuncEdit,
     TeePoEdi, TeeFormatting,
     Series {<-because TPointSeries editor trick} ;

{ TFormTeeSeries}
procedure TFormTeeSeries.EPercentFormatChange(Sender: TObject);
begin
  TheSeries.PercentFormat:=LocalToDelphiFormat(EPercentFormat.Text);
end;

Procedure TFormTeeSeries.SetCBSeries;
begin
  if Assigned(TheSeries) then
  begin
    CBSeries.ItemIndex:=CBSeries.Items.IndexOfObject(TheSeries);
    CBSeriesChange(Self);
  end
  else PageSeries.Visible:=False;
end;

procedure TFormTeeSeries.EnableMultiLine;
begin
  CBMultiLine.Enabled:=TheSeries.Marks.Style in
    [smsLabelPercent,smsLabelValue,smsPercentTotal,smsLabelPercentTotal,smsXY];
end;

procedure TFormTeeSeries.FillAxis(Items:TStrings; Horizontal:Boolean);
var t : Integer;
begin
  With Items do While Count>3 do Delete(Count-1);

  With TheSeries.ParentChart do
  begin
    for t:=TeeInitialCustomAxis to Axes.Count-1 do
    if (Axes[t].Horizontal and Horizontal) or
       ((not Axes[t].Horizontal) and (not Horizontal)) then
         Items.AddObject(TeeMsg_CustomAxesEditor+' '+IntToStr(t-TeeInitialCustomAxis),Axes[t]);
  end;
end;

Function TFormTeeSeries.AllSeriesMarksVisible:Boolean;
var t : Integer;
begin
  result:=True;
  With TheSeries.ParentChart do
  for t:=0 to SeriesCount-1 do
  if not Series[t].Marks.Visible then
  begin
    result:=False;
    exit;
  end;
end;

class Function TFormTeeSeries.MarkSymbolsForm(AOwner: TComponent;
              Symbol:TSeriesMarksSymbol; AParent:TWinControl=nil):TFormTeeShape;
var tmp : TCheckBox;
begin
  result:=TFormTeeShape.CreateForm(AOwner,Symbol,AParent);  // 7.0

  with result do
  begin
    BBackColor.Hide;
    PC1.HandleNeeded;
    TabText.TabVisible:=False;

    tmp:=TCheckBox.Create(result);
    with tmp do
    begin
      Left:=BBackColor.Left;
      Top:=BBackColor.Top;
      Width:=BBackColor.Width;
      Caption:='&Visible';
      Checked:=Symbol.Visible;
      OnClick:=CBVisibleChecked;
      Parent:=TabFormat;
    end;
  end;
end;

procedure TFormTeeSeries.PageSeriesChange(Sender: TObject);

  procedure SetTabSeriesMarks;
  begin
    if not Assigned(IMarksObject) then
    begin
      IMarksObject:=InsertTeeObjectForm(PageControlMarks,nil);
      IMarksSymbol:=MarkSymbolsForm(Self,TheSeries.Marks.Symbol,TabSymbol);
    end;

    With TheSeries.Marks do
    begin
      RGMarkStyle.ItemIndex  :=Ord(Style);
      UDArrowsLength.Position:=Callout.Length;
      UDArrowDist.Position   :=Callout.Distance;
      UDMarksAngle.Position  :=Angle;
      CBMarkClip.Checked     :=Clip;
      UDEvery.Position       :=DrawEvery;
      CBMultiLine.Checked    :=MultiLine;
      CBMarksVisible.Checked :=Visible;
      BMarkLinCol.LinkPen(Callout.Arrow);
      CBHead.ItemIndex       :=Ord(Callout.ArrowHead);
      UDHeadSize.Position    :=Callout.ArrowHeadSize;
    end;
    
    CBAllVisible.Checked:=AllSeriesMarksVisible;
    EnableMultiLine;

    IMarksObject.RefreshControls(TheSeries.Marks);
    IMarksSymbol.RefreshControls(TheSeries.Marks.Symbol);
  end;

  procedure SetTabSeriesGeneral;
  var tmpSt     : String;
      tmpCursor : TCursor;
      tmpList   : TChartValueList;
  begin
    if Assigned(TheSeries) then
    With TheSeries do
    begin
      CBShowInLegend.Checked   :=ShowInLegend;
      CBDepth.Checked          :=Depth=-1;
      if Depth=-1 then UDDepth.Position:=0
                  else UDDepth.Position:=Depth;

      AddDefaultValueFormats(CBFormat.Items);

      tmpSt:=DelphiToLocalFormat(ValueFormat);
      With CBFormat.Items do if IndexOf(tmpSt)=-1 then Add(tmpSt);
      CBFormat.Text:=tmpSt;

      EPercentFormat.Text:=DelphiToLocalFormat(PercentFormat);

      FillAxes;

      With CBHorizAxis do
      Case TheSeries.HorizAxis of
        aTopAxis:       ItemIndex:=0;
        aBottomAxis:    ItemIndex:=1;
        aBothHorizAxis: ItemIndex:=2;
      else
        ItemIndex:=Items.IndexOfObject(TheSeries.CustomHorizAxis);
      end;

      With CBVertAxis do
      Case TheSeries.VertAxis of
        aLeftAxis:     ItemIndex:=0;
        aRightAxis:    ItemIndex:=1;
        aBothVertAxis: ItemIndex:=2;
      else
        ItemIndex:=Items.IndexOfObject(TheSeries.CustomVertAxis);
      end;

      CBXDateTime.Checked:=XValues.DateTime;
      CBYDateTime.Checked:=YValues.DateTime;

      tmpList:=FindZList;
      CBZDateTime.Visible:=Assigned(tmpList);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -