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

📄 teengine.pas

📁 Delphi TeeChartPro.6.01的源代码
💻 PAS
📖 第 1 页 / 共 5 页
字号:

  TCustomChartSeries=class(TCustomChartElement)
  private
    FShowInLegend : Boolean;
    FTitle        : String;
    FIdentifier   : String;  { DecisionCube }
    FStyle        : TChartSeriesStyle; { DecisionCube }
    procedure ReadIdentifier(Reader: TReader);
    procedure WriteIdentifier(Writer: TWriter);
    procedure ReadStyle(Reader: TReader);
    procedure WriteStyle(Writer: TWriter);

    Procedure RepaintDesigner;
    Procedure SetShowInLegend(Value:Boolean);
    Procedure SetTitle(Const Value:String);
  protected
    InternalUse : Boolean;
    Procedure Added; dynamic;
    Procedure CalcHorizMargins(Var LeftMargin,RightMargin:Integer); virtual;
    Procedure CalcVerticalMargins(Var TopMargin,BottomMargin:Integer); virtual;
    procedure DefineProperties(Filer: TFiler); override;
    procedure DoBeforeDrawChart; virtual;
    Procedure GalleryChanged3D(Is3D:Boolean); dynamic;
    Procedure Removed; dynamic;
    Procedure SetActive(Value:Boolean); override;
  public
    Constructor Create(AOwner: TComponent); override;

    procedure Assign(Source:TPersistent); override;
    Function SameClass(tmpSeries:TChartSeries):Boolean;

    property ShowInLegend:Boolean read FShowInLegend write SetShowInLegend default True;
    property Title:String read FTitle write SetTitle;
    { DSS, hidden }
    property Identifier:String read FIdentifier write FIdentifier;
    property Style:TChartSeriesStyle read FStyle write FStyle default [];
  end;

  TSeriesRandomBounds=packed record
    tmpX,StepX,tmpY,MinY,DifY:Double;
  end;

  TTeeFunctionClass=class of TTeeFunction;

  TTeeSeriesType=class(TObject)
    SeriesClass      : TChartSeriesClass;
    FunctionClass    : TTeeFunctionClass;
    Description      : PString;
    GalleryPage      : PString;
    NumGallerySeries : Integer;
  end;

  TChartSubGalleryProc=Function(Const AName:String):TCustomAxisPanel of object;

  TLegendTextStyle=( ltsPlain,ltsLeftValue,ltsRightValue,
                     ltsLeftPercent,ltsRightPercent,ltsXValue,ltsValue,
                     ltsPercent,ltsXAndValue,ltsXAndPercent);

  TeeFormatFlags = (tfNoMandatory,tfColor,tfLabel,tfMarkPosition);
  TeeFormatFlag  = set of TeeFormatFlags;

  TLabelsList=class(TList)
  private
    Series : TChartSeries;
    Procedure DeleteLabel(ValueIndex:Integer);
    Function GetLabel(ValueIndex:Integer):String;
    Procedure SetLabel(ValueIndex:Integer; Const ALabel:String);
    Procedure InsertLabel(ValueIndex:Integer; Const ALabel:String);
  public
    procedure Assign(Source:TLabelsList);
    procedure Clear; override;
    Function IndexOfLabel(const ALabel:String; CaseSensitive:Boolean=True):Integer;
    property Labels[Index:Integer]:String read GetLabel write SetLabel; default;
  end;

  TChartSeries=class(TCustomChartSeries)
  private
    FColor              : TColor;
    FColorEachPoint     : Boolean;
    FColors             : TList;
    FColorSource        : String;
    FCursor             : TCursor;
    FDataSources        : TList;
    FDepth              : Integer;
    FFirstVisibleIndex  : Integer;
    FGetHorizAxis       : TChartAxis;
    FGetVertAxis        : TChartAxis;
    FLabelsSource       : String;
    FLastVisibleIndex   : Integer;
    FLinkedSeries       : TChartSeriesList;
    FMarks              : TSeriesMarks;
    FPercentFormat      : String;
    FTempDataSources    : TStringList;
    FValueFormat        : String;
    FValuesList         : TChartValueLists;
    FX                  : TChartValueList;
    FLabels             : TLabelsList;
    FY                  : TChartValueList;

    FHorizAxis          : THorizAxis;
    FCustomHorizAxis    : TChartAxis;
    FCustomVertAxis     : TChartAxis;
    FZOrder             : Integer;

    FVertAxis           : TVertAxis;
    FRecalcOptions      : TSeriesRecalcOptions;

    FTeeFunction        : TTeeFunction;

    { Private }
    IsMouseInside       : Boolean;
    ILabelOrder         : TChartListOrder;

    { Events }
    FAfterDrawValues    : TNotifyEvent;
    FBeforeDrawValues   : TNotifyEvent;
    FOnAfterAdd         : TSeriesOnAfterAdd;
    FOnBeforeAdd        : TSeriesOnBeforeAdd;
    FOnClearValues      : TSeriesOnClear;
    FOnClick            : TSeriesClick;
    FOnDblClick         : TSeriesClick;
    FOnGetMarkText      : TSeriesOnGetMarkText;
    FOnMouseEnter       : TNotifyEvent;
    FOnMouseLeave       : TNotifyEvent;

    Function CanAddRandomPoints:Boolean;
    Function CompareLabelIndex(a,b:Integer):Integer;
    Function GetDataSource:TComponent;
    Function GetZOrder:Integer;
    Procedure GrowColors;
    Procedure InternalAddDataSource(Value:TComponent);
    Function IsPercentFormatStored:Boolean;
    Function IsValueFormatStored:Boolean;
    procedure ReadCustomHorizAxis(Reader: TReader);
    procedure ReadCustomVertAxis(Reader: TReader);
    procedure ReadDataSources(Reader: TReader);
    Procedure RecalcGetAxis;
    Procedure RemoveAllLinkedSeries;
    Procedure SetColorSource(Const Value:String);
    Procedure SetCustomHorizAxis(Value:TChartAxis);
    Procedure SetCustomVertAxis(Value:TChartAxis);
    Procedure SetDataSource(Value:TComponent);
    procedure SetDepth(const Value: Integer);
    Procedure SetHorizAxis(const Value:THorizAxis);
    Procedure SetLabelsSource(Const Value:String);
    procedure SetMarks(Value:TSeriesMarks);
    Procedure SetPercentFormat(Const Value:String);
    Procedure SetValueColor(ValueIndex:Integer; AColor:TColor);
    Procedure SetValueFormat(Const Value:String);
    Procedure SetVertAxis(const Value:TVertAxis);
    Procedure SetXValue(Index:Integer; Const Value:Double);
    Procedure SetYValue(Index:Integer; Const Value:Double);
    Procedure SetZOrder(Value:Integer);
    procedure WriteCustomHorizAxis(Writer: TWriter);
    procedure WriteCustomVertAxis(Writer: TWriter);
    procedure WriteDataSources(Writer: TWriter);
    function GetXLabel(Index: Integer): String;
    procedure SetXLabel(Index: Integer; const Value: String);
  protected
    DontSaveData     : Boolean;
    ForceSaveData    : Boolean;
    ManualData       : Boolean;
    INumSampleValues : Integer;
    IUpdating        : Integer;
    IUseSeriesColor  : Boolean;
    IUseNotMandatory : Boolean;
    IZOrder          : Integer;
    ILegend          : TTeeCustomShape;
    IFirstDrawIndex  : Integer;

    Function AddChartValue(Source:TChartSeries; ValueIndex:Integer):Integer; virtual;
    Procedure Added; override;
    Procedure AddedValue(Source:TChartSeries; ValueIndex:Integer); virtual;
    Procedure AddLinkedSeries(ASeries:TChartSeries);
    Procedure AddSampleValues(NumValues:Integer); dynamic;
    Procedure AddValues(Source:TChartSeries); virtual;
    Procedure CalcFirstLastVisibleIndex;
    Procedure CalcZOrder; virtual;
    Function CheckMouse(x,y:Integer):Boolean;
    Procedure ClearLists; virtual;
    class Procedure CreateSubGallery(AddSubChart:TChartSubGalleryProc); virtual;
    procedure DefineProperties(Filer: TFiler); override;
    Procedure DeletedValue(Source:TChartSeries; ValueIndex:Integer); virtual;
    procedure DoAfterDrawValues; virtual;
    procedure DoBeforeDrawValues; virtual;
    procedure DrawAllValues; virtual;
    Procedure DrawLegendShape(ValueIndex:Integer; Const Rect:TRect); virtual;
    Procedure DrawMark(ValueIndex:Integer; Const St:String; APosition:TSeriesMarkPosition); virtual;
    procedure DrawMarks;
    procedure DrawValue(ValueIndex:Integer); virtual;
    Function FirstInZOrder:Boolean;
    Procedure GetChildren(Proc:TGetChildProc; Root:TComponent); override;
    Function GetMarkText(ValueIndex:Integer):String;
    Function GetValueColor(ValueIndex:Integer):TColor; virtual;
    Function GetxValue(ValueIndex:Integer):Double; virtual;  { conflicts with c++ wingdi.h }
    Function GetyValue(ValueIndex:Integer):Double; virtual;  { conflicts with c++ wingdi.h }
    Function InternalColor(ValueIndex:Integer):TColor;
    Procedure Loaded; override;
    procedure Notification( AComponent: TComponent;
                            Operation: TOperation); override;
    Procedure NotifyNewValue(Sender:TChartSeries; ValueIndex:Integer); virtual;
    Procedure NotifyValue(ValueEvent:TValueEvent; ValueIndex:Integer); virtual;
    Function MoreSameZOrder:Boolean; virtual;
    Procedure PrepareForGallery(IsEnabled:Boolean); dynamic;
    Procedure PrepareLegendCanvas( ValueIndex:Integer; Var BackColor:TColor;
                                   Var BrushStyle:TBrushStyle); virtual;
    procedure ReadData(Stream: TStream);
    Procedure Removed; override;
    Procedure RemoveLinkedSeries(ASeries:TChartSeries);
    Procedure SetChartValueList( AValueList:TChartValueList;
                                 Value:TChartValueList);
    Procedure SetColorEachPoint(Value:Boolean); virtual;
    Procedure SetHorizontal;
    Procedure SetParentChart(Const Value:TCustomAxisPanel); override;
    Procedure SetSeriesColor(AColor:TColor); virtual;
    class Procedure SetSubGallery(ASeries:TChartSeries; Index:Integer); virtual;
    Procedure SetXValues(Value:TChartValueList);
    Procedure SetYValues(Value:TChartValueList);
    procedure WriteData(Stream: TStream); dynamic;
  public
    CalcVisiblePoints     : Boolean;
    DrawBetweenPoints     : Boolean;
    AllowSinglePoint      : Boolean;
    HasZValues            : Boolean;
    StartZ                : Integer;
    MiddleZ               : Integer;
    EndZ                  : Integer;
    MandatoryValueList    : TChartValueList;
    NotMandatoryValueList : TChartValueList;
    YMandatory            : Boolean;

    Constructor Create(AOwner: TComponent); override;
    Destructor Destroy; override;

    Function Add(Const AValue:Double; Const ALabel:String='';
                       AColor:TColor=clTeeColor):Integer; virtual;
    Function AddArray(Const Values:Array of TChartValue):Integer; overload;
    Function AddNull(Const Value:Double):Integer; overload;
    Function AddNull(Const ALabel:String=''):Integer; overload; virtual;
    Function AddNullXY(Const X,Y:Double; Const ALabel:String=''):Integer; virtual;
    Function AddX(Const AXValue:Double; Const ALabel:String='';
                         AColor:TColor=clTeeColor):Integer;
    Function AddXY(Const AXValue,AYValue:Double; Const ALabel:String='';
                         AColor:TColor=clTeeColor):Integer; virtual;
    Function AddY(Const AYValue:Double; Const ALabel:String='';
                         AColor:TColor=clTeeColor):Integer;

    procedure Assign(Source:TPersistent); override;
    procedure AssignFormat(Source:TChartSeries);

    Function AssociatedToAxis(Axis:TChartAxis):Boolean; virtual;
    Procedure BeginUpdate;
    Procedure CheckOrder; dynamic;
    Procedure Clear; virtual;
    Function Count:Integer;
    Function CountLegendItems:Integer; virtual;
    Procedure Delete(ValueIndex:Integer); overload; virtual;
    Procedure Delete(Start,Quantity:Integer); overload; virtual;
    Procedure EndUpdate;
    Procedure FillSampleValues(NumValues:Integer=0); dynamic;
    Function IsNull(ValueIndex:Integer):Boolean;
    Function IsValidSourceOf(Value:TChartSeries):Boolean; dynamic;
    Function IsValidSeriesSource(Value:TChartSeries):Boolean; dynamic;
    Function LegendToValueIndex(LegendIndex:Integer):Integer; virtual;
    Function LegendItemColor(LegendIndex:Integer):TColor; virtual;
    Function LegendString(LegendIndex:Integer; LegendTextStyle:TLegendTextStyle):String; virtual;
    property LinkedSeries:TChartSeriesList read FLinkedSeries;
    Function MaxXValue:Double; virtual;
    Function MaxYValue:Double; virtual;
    Function MaxZValue:Double; virtual;
    Function MinXValue:Double; virtual;
    Function MinYValue:Double; virtual;
    Function MinZValue:Double; virtual;
    Function NumSampleValues:Integer; dynamic;
    Function RandomBounds(NumValues:Integer):TSeriesRandomBounds;
    Procedure RemoveDataSource(Value:TComponent);
    Procedure SetNull(ValueIndex:Integer; Null:Boolean=True); // 6.0
    Procedure SortByLabels(Order:TChartListOrder=loAscending); // 6.0
    Function VisibleCount:Integer; { <-- Number of VISIBLE points (Last-First+1) }

    property ValuesList:TChartValueLists read FValuesList;
    property XValue[Index:Integer]:Double read GetxValue write SetXValue;
    property YValue[Index:Integer]:Double read GetyValue write SetYValue;

    property ZOrder:Integer read GetZOrder write SetZOrder default TeeAutoZOrder;
    Function MaxMarkWidth:Integer;

    Function CalcXPos(ValueIndex:Integer):Integer; virtual;
    Function CalcXPosValue(Const Value:Double):Integer;
    Function CalcXSizeValue(Const Value:Double):Integer;

    Function CalcYPos(ValueIndex:Integer):Integer; virtual;
    Function CalcYPosValue(Const Value:Double):Integer;
    Function CalcYSizeValue(Const Value:Double):Integer;

    Function CalcPosValue(Const Value:Double):Integer;

    Function XScreenToValue(ScreenPos:Integer):Double;
    Function YScreenToValue(ScreenPos:Integer):Double;

    Function XValueToText(Const AValue:Double):String;
    Function YValueToText(Const AValue:Double):String;

    Procedure ColorRange( AValueList:TChartValueList;
                          Const FromValue,ToValue:Double;
                          AColor:TColor);
    Procedure CheckDataSource;

    { Public Properties }
    property Labels:TLabelsList read FLabels;
    property XLabel[Index:Integer]:String read GetXLabel write SetXLabel;  // deprecated (obsolete)
    property ValueMarkText[Index:Integer]:String read GetMarkText;

    property ValueColor[Index:Integer]:TColor read GetValueColor write SetValueColor;
    property XValues:TChartValueList read FX write SetXValues;
    property YValues:TChartValueList read FY writ

⌨️ 快捷键说明

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