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

📄 teedbsumedit.pas

📁 TeeChart 7.0 With Source在Delphi 7.0中的安装
💻 PAS
字号:
{********************************************}
{     TeeChart Pro Charting Library          }
{ Copyright (c) 1995-2005 by David Berneda   }
{         All Rights Reserved                }
{********************************************}
unit TeeDBSumEdit;
{$I TeeDefs.inc}

interface

uses
  SysUtils, Classes,
  {$IFDEF CLX}
  QGraphics, QControls, QForms, QDialogs, QStdCtrls, QExtCtrls,
  {$ELSE}
  Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls,
  {$ENDIF}
  Chart, TeEngine, TeeSourceEdit, TeeDBEdit, TeCanvas;

type
  TDBChartSumEditor = class(TBaseDBChartEditor)
    Label1: TLabel;
    Label2: TLabel;
    CBAgg: TComboFlat;
    CBValue: TComboFlat;
    CBGroup: TComboFlat;
    CBTimeStep: TComboFlat;
    Label3: TLabel;
    Label4: TLabel;
    CBSort: TComboFlat;
    CBSortType: TComboFlat;
    procedure CBAggChange(Sender: TObject);
    procedure CBGroupChange(Sender: TObject);
    procedure BApplyClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure CBSourcesChange(Sender: TObject);
    procedure CBSortChange(Sender: TObject);
    procedure CBSortTypeChange(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure CheckCount;
    Procedure EnableCombos;
    Procedure EnableTimeStep;
  public
    { Public declarations }
  end;

  TDBSummarySource=class(TTeeSeriesDBSource)
  public
    class Function Description:String; override;
    class Function Editor:TComponentClass; override;
    class Function HasSeries(ASeries:TChartSeries):Boolean; override;
  end;

// Show modal dialog to edit Series Database Summary properties.
Function TeeDBSummaryEditor(AOwner:TComponent; ASeries:TChartSeries):Boolean;

implementation

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

Uses
  {$IFDEF CLR}
  Variants,
  {$ENDIF}
  DBChart, TeeProcs, DB, TeeConst;

Function TeeDBSummaryEditor(AOwner:TComponent; ASeries:TChartSeries):Boolean;
begin
  // Show the Summary editor dialog...
  With TDBChartSumEditor.Create(AOwner) do
  try
    Align:=alNone;
    Tag:={$IFDEF CLR}Variant{$ELSE}Integer{$ENDIF}(ASeries);
    BorderStyle:=TeeBorderStyle;
    Caption:='Summary properties';
    result:=ShowModal=mrOk;
  finally
    Free;
  end;
end;

Function TeeGetDBGroup(St:String; Var Step:TTeeDBGroup):Boolean;
begin
  result:=False;
  St:=TeeGetDBPart(1,St);
  if St<>'' then
  begin
    result:=True;
    Step:=StrToDBGroup(St);
  end;
end;

procedure TDBChartSumEditor.CBAggChange(Sender: TObject);
begin
  inherited;
  With CBValue do
  begin
    Enabled:=(DataSet<>nil) and (CBAgg.ItemIndex<>1);
    if ItemIndex<>-1 then Text:=Items[ItemIndex] { 5.01 }
                     else Text:='';
  end;
  BApply.Enabled:=True
end;

Procedure TDBChartSumEditor.EnableTimeStep;

  Function TheFieldType(Const AName:String):TFieldType;
  begin
    With DataSet do
    if FieldCount>0 then
       result:=FieldByName(AName).DataType
    else
    begin
      FieldDefs.Update;
      result:=FieldDefs[FieldDefs.IndexOf(AName)].DataType;
    end;
  end;

var tmpName : String;
begin
  if CBGroup.ItemIndex=-1 then
  begin
    CBTimeStep.ItemIndex:=-1;
    CBTimeStep.Enabled:=False;
    CBSort.Enabled:=False;
    CBSortType.Enabled:=False;
  end
  else
  begin
    With CBGroup do tmpName:=Items[ItemIndex];
    CBTimeStep.Enabled:=TeeFieldType(TheFieldType(tmpName))=tftDateTime;
    CBSort.Enabled:=not CBTimeStep.Enabled;
    if not CBSort.Enabled then CBSort.ItemIndex:=0;
    CBSortType.Enabled:=CBSort.ItemIndex>0;
  end;
end;

procedure TDBChartSumEditor.CBGroupChange(Sender: TObject);
begin
  inherited;
  EnableTimeStep;
  BApply.Enabled:=True;
end;

procedure TDBChartSumEditor.BApplyClick(Sender: TObject);

  Function TeeDBGroupToStr(Group:TTeeDBGroup):String;
  begin
    Case Group of
      dgHour   : result:='HOUR';
      dgDay    : result:='DAY';
      dgWeek   : result:='WEEK';
      dgWeekDay: result:='WEEKDAY';
      dgMonth  : result:='MONTH';
      dgQuarter: result:='QUARTER';
      dgYear   : result:='YEAR'
    else
      result:='';
    end;
  end;

var tmp   : String;
    tmpSt : String;
begin
  inherited;

  Case CBAgg.ItemIndex of
    0: tmp:='#SUM#';
    1: tmp:='#COUNT#';
    2: tmp:='#HIGH#';
    3: tmp:='#LOW#';
    4: tmp:='#AVG#';
  else tmp:='';
  end;

  TheSeries.DataSource:=nil;

  With CBValue do { 5.01 }
  if ItemIndex=-1 then
     TheSeries.MandatoryValueList.ValueSource:=tmp+Text
  else
     TheSeries.MandatoryValueList.ValueSource:=tmp+Items[ItemIndex];

  tmpSt:='';

  if CBGroup.ItemIndex<>-1 then
  begin
    tmpSt:=CBGroup.Items[CBGroup.ItemIndex];

    if CBTimeStep.Enabled and (CBTimeStep.ItemIndex<>-1) then
       tmpSt:='#'+TeeDBGroupToStr(TTeeDBGroup(CBTimeStep.ItemIndex))+'#'+tmpSt
    else
    case CBSort.ItemIndex of
      2: begin
           TheSeries.MandatoryValueList.Order:=loNone;

           if CBSortType.ItemIndex=0 then tmpSt:='#SORTASC#'+tmpSt
                                     else tmpSt:='#SORTDES#'+tmpSt;
         end;
      1: begin
           TheSeries.NotMandatoryValueList.Order:=loNone;
           TheSeries.MandatoryValueList.Order:=TChartListOrder(CBSortType.ItemIndex);
         end;
      0: begin
           TheSeries.MandatoryValueList.Order:=loNone;
           TheSeries.NotMandatoryValueList.Order:=loNone;
         end;
    end;
  end;

  With TheSeries do
  begin
    XLabelsSource:=tmpSt;
    DataSource:=Self.DataSet;
  end;

  BApply.Enabled:=False;
end;

procedure TDBChartSumEditor.FormShow(Sender: TObject);
var tmp       : TTeeDBGroup;
    tmpSource : String;
    tmpOrder  : TChartListOrder;
begin
  inherited;
  EnableCombos;
  FillFields([CBValue,CBGroup]);

  if Assigned(TheSeries) then
  begin
    tmpSource:=TheSeries.MandatoryValueList.ValueSource;

    With CBAgg do ItemIndex:=Items.IndexOf(TeeGetDBPart(1,tmpSource));

    With CBValue do ItemIndex:=Items.IndexOf(TeeGetDBPart(2,tmpSource));

    tmpSource:=TeeGetDBPart(2,TheSeries.XLabelsSource);

    tmpOrder:=loNone;

    if tmpSource='' then
       tmpSource:=TeeGetDBPart(1,TheSeries.XLabelsSource)
    else
       tmpOrder:=StrToDBOrder(TeeGetDBPart(1,TheSeries.XLabelsSource));

    if tmpSource='' then tmpSource:=TheSeries.XLabelsSource;

    With CBGroup do ItemIndex:=Items.IndexOf(tmpSource);

    EnableTimeStep;

    With CBTimeStep do
    if Enabled then
    begin
      if TeeGetDBGroup(TheSeries.XLabelsSource,tmp) then
         ItemIndex:=Ord(tmp);
    end;

    CBSort.Enabled:=(not CBTimeStep.Enabled) and (CBGroup.ItemIndex<>-1);

    if CBSort.Enabled then
       if tmpOrder=loNone then
       begin
         if TheSeries.MandatoryValueList.Order<>loNone then
         begin
           CBSort.ItemIndex:=1;
           CBSortType.ItemIndex:=Ord(TheSeries.MandatoryValueList.Order);
         end
         else CBSort.ItemIndex:=0;
       end
       else
       begin
         CBSort.ItemIndex:=2;
         CBSortType.ItemIndex:=Ord(tmpOrder);
       end;

    CBSortType.Enabled:=CBSort.Enabled and (CBSort.ItemIndex>0);

    CheckCount;
  end;
  TeeTranslateControl(self);
end;

procedure TDBChartSumEditor.CheckCount;
begin
  CBValue.Enabled:=(DataSet<>nil) and (CBAgg.ItemIndex<>1);
  if CBValue.Enabled then
     With CBValue do
     begin
       ItemIndex:=Items.IndexOf(TeeGetDBPart(2,
                                TheSeries.MandatoryValueList.ValueSource));
       if ItemIndex<>-1 then Text:=Items[ItemIndex]
                        else Text:='';
     end
  else
    CBValue.Text:='';
end;

Procedure TDBChartSumEditor.EnableCombos;
begin
  EnableControls(DataSet<>nil,[CBAgg,CBValue,CBTimeStep,CBGroup]);
end;

procedure TDBChartSumEditor.CBSourcesChange(Sender: TObject);
begin
  inherited;
  EnableCombos;
  FillFields([CBValue,CBGroup]);
end;

procedure TDBChartSumEditor.CBSortChange(Sender: TObject);
begin
  CBSortType.Enabled:=CBSort.ItemIndex>0;
  BApply.Enabled:=True;
end;

procedure TDBChartSumEditor.CBSortTypeChange(Sender: TObject);
begin
  BApply.Enabled:=True;
end;

procedure TDBChartSumEditor.FormCreate(Sender: TObject);
begin
  inherited;
  CBSortType.ItemIndex:=0;
  CBSort.ItemIndex:=0;
end;

{ TDBSummarySource }

class function TDBSummarySource.Description: String;
begin
  result:=TeeMsg_Summary;
end;

class function TDBSummarySource.Editor: TComponentClass;
begin
  result:=TDBChartSumEditor;
end;

class function TDBSummarySource.HasSeries(
  ASeries: TChartSeries): Boolean;
begin
  result:=(ASeries.DataSource is TDataSet) and
          (Copy(ASeries.MandatoryValueList.ValueSource,1,1)='#');
end;

initialization
  TeeSources.Add({$IFDEF CLR}TObject{$ENDIF}(TDBSummarySource));
finalization
  TeeSources.Remove({$IFDEF CLR}TObject{$ENDIF}(TDBSummarySource));
end.

⌨️ 快捷键说明

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