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

📄 teecomma.pas

📁 complete source code for teechart 7
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{**********************************************}
{   TTeeCommander Component                    }
{   Copyright (c) 1998-2004 by David Berneda   }
{**********************************************}
unit TeeComma;
{$I TeeDefs.inc}

{$IFDEF TEEOCX}
{$I TeeAXDefs.inc}
{$ENDIF}

interface

uses {$IFNDEF LINUX}
     Windows, Messages,
     {$ENDIF}
     SysUtils, Classes,
     {$IFDEF CLX}
     QGraphics, QControls, QForms, QDialogs, QStdCtrls, QExtCtrls, QComCtrls,
     QButtons,
     {$ELSE}
     Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls,
     Buttons,
     {$ENDIF}

     TeeProcs, Series,
     {$IFNDEF TEEOCXSTD}
     TeeEdit,
     {$ENDIF}
     Chart;

type
  TCustomTeeCommander=class(TCustomPanelNoCaption,ITeeEventListener)
  private
    FMouseButton : TMouseButton;
    FPanel       : TCustomTeePanel;
    FVertical    : Boolean;

    Procedure ReAlignTeeControls;
    Procedure SetVertical(Value:Boolean);
  protected
    procedure TeeEvent(Event:TTeeEvent);
    Procedure DoMouseDown(X,Y:Integer); virtual;
    Procedure DoMouseMove(X,Y:Integer); virtual;
    Procedure DoMouseUp; virtual;
    Function DoPanelMouse:Boolean; virtual;
    Procedure FreeOwnedControls;
    procedure Loaded; override;
    procedure Notification( AComponent: TComponent;
                            Operation: TOperation); override;
    Procedure RemovingControl(AControl:TControl); dynamic;
    procedure SetPanel(Const Value: TCustomTeePanel); virtual;
    Function TeePanelClass:String;
    Procedure ShowHideControls(Value:Boolean); virtual;
  public
    { Public declarations }
    Constructor Create(AOwner:TComponent); override;
    Destructor Destroy; override;

    Procedure CreateBevel( APos:Integer);

    Function CreateButton( APos:Integer; AProc:TNotifyEvent;
                           Const AHint:String;
                           Const AResName:String;
                           AGroupIndex:Integer {$IFNDEF BCB}=0{$ENDIF}):TSpeedButton; {$IFNDEF BCB4}overload;{$ENDIF}

    {$IFNDEF BCB4}
    Function CreateButton( APos:Integer;
                           AProc:TNotifyEvent;
                           Const AHint:String;
                           ABitmap: TBitmap;
                           AGroupIndex:Integer {$IFNDEF BCB}=0{$ENDIF}):TSpeedButton; overload;
    {$ENDIF}

    Function CreateLabel(APos:Integer; AColor:TColor):TLabel;
  published
    { Published declarations }
    property Panel:TCustomTeePanel read FPanel write SetPanel;
    property Vertical:Boolean read FVertical write SetVertical default False;

    { TPanel properties }
    property Align;
    property BevelInner;
    property BevelOuter;
    property BevelWidth;
    property BorderWidth;
    property BorderStyle;
    property Color;
    property DragMode;
    {$IFNDEF CLX}
    property DragCursor;
    {$ENDIF}
    property Enabled;
    property ParentColor;
    property ParentShowHint;
    property PopupMenu;
    property ShowHint{$IFNDEF TEEOCX} default True{$ENDIF};
    property TabOrder;
    property TabStop;
    property Visible;
    property Anchors;
    property Constraints;
    {$IFNDEF CLX}
    property AutoSize;
    property DragKind;
    {$ENDIF}

    { TPanel events }
    property OnClick;
    {$IFNDEF CLX}
    {$IFDEF D5}
    property OnContextPopup;
    {$ENDIF}
    {$ENDIF}
    property OnDblClick;
    {$IFNDEF CLX}
    property OnDragDrop;
    property OnDragOver;
    property OnEndDrag;
    property OnStartDrag; 
    {$ENDIF}
    property OnEnter;
    property OnExit;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnResize;
    property OnConstrainedResize;
    {$IFNDEF CLX}
    property OnCanResize;
    {$IFNDEF TEEOCX}
    property OnDockDrop;
    property OnDockOver;
    property OnEndDock;
    property OnStartDock;
    property OnUnDock;
    {$ENDIF}
    {$ENDIF}
  end;

  TeeCommanderControls=( tcbNormal,
                         tcbSeparator,
                         tcbRotate,
                         tcbMove,
                         tcbZoom,
                         tcbDepth,
                         tcbEdit,
                         tcbPrintPreview,
                         tcbCopy,
                         tcbSave,
                         tcbLabel,
                         tcb3D );

  TTeeCommander=class;
  TTeeEditedChartEvent=procedure(Sender:TTeeCommander; AChart:TCustomChart) of object;

  TTeeCommanderOnSetLabel=procedure(Sender:TTeeCommander; Var Text:String) of object;

  TTeeCommander=class(TCustomTeeCommander)
  private
    { Private declarations }
    FButtonCopy    : TSpeedButton;
    FButtonDepth   : TSpeedButton;
    FButtonEdit    : TSpeedButton;
    FButtonMove    : TSpeedButton;
    FButtonNormal  : TSpeedButton;
    FButtonPrint   : TSpeedButton;
    FButtonRotate  : TSpeedButton;
    FButtonSave    : TSpeedButton;
    FButtonZoom    : TSpeedButton;
    FButton3D      : TSpeedButton;

    {$IFNDEF TEEOCXNOEDITOR}
    FEditor        : TChartEditor;
    FPreviewer     : TChartPreviewer;
    {$ENDIF}

    FEnablePieExp  : Boolean;
    FLabel         : TLabel;
    FLabelValues   : Boolean;

    FDragging      : Boolean;
    FDraggingIndex : Integer;
    FOldX          : Integer;
    FOldY          : Integer;
    {$IFDEF CLX}
    IChanging3D    : Boolean;
    {$ENDIF}
    IPieSeries     : TPieSeries;  // 7.0

    FOnEditedChart : TTeeEditedChartEvent;
    FOnSetLabel    : TTeeCommanderOnSetLabel;

    procedure Button3DClick(Sender: TObject);
    procedure ButtonCopyClick(Sender: TObject);
    procedure ButtonDepthClick(Sender: TObject);
    procedure ButtonEditClick(Sender: TObject);
    procedure ButtonMoveClick(Sender: TObject);
    procedure ButtonNormalClick(Sender: TObject);
    procedure ButtonPrintClick(Sender: TObject);
    procedure ButtonRotateClick(Sender: TObject);
    procedure ButtonSaveClick(Sender: TObject);
    procedure ButtonZoomClick(Sender: TObject);
    Function IsButtonDown(AButton:TSpeedButton):Boolean;
    procedure SetLabelCaption(Const ACaption:String);
    procedure SetLabelValues(Value:Boolean);
    Function CaptionPanel(Const ACaption:String):String;

    Function GetPieSeries(x,y:Integer):TPieSeries;

    {$IFNDEF TEEOCXNOEDITOR}
    procedure SetEditor(const Value: TChartEditor);
    procedure SetPreviewer(const Value: TChartPreviewer);
    {$ENDIF}

  protected
    { Protected declarations }
    Procedure DoMouseDown(X,Y:Integer); override;
    Procedure DoMouseMove(X,Y:Integer); override;
    Procedure DoMouseUp; override;
    Function DoPanelMouse:Boolean; override;
    Procedure RemovingControl(AControl:TControl); override;
    Procedure ShowHideControls(Value:Boolean); override;
    {$IFNDEF TEEOCXNOEDITOR}
    procedure Notification( AComponent: TComponent;
                            Operation: TOperation); override;
    {$ENDIF}
  public
    { Public declarations }
    Constructor Create(AOwner:TComponent); override;

    Procedure CreateControls(AControls:Array of TeeCommanderControls);
    Procedure RepositionControls;

    property Button3D      : TSpeedButton read FButton3D;
    property ButtonCopy    : TSpeedButton read FButtonCopy;
    property ButtonDepth   : TSpeedButton read FButtonDepth;
    property ButtonEdit    : TSpeedButton read FButtonEdit;
    property ButtonMove    : TSpeedButton read FButtonMove;
    property ButtonNormal  : TSpeedButton read FButtonNormal;
    property ButtonPrint   : TSpeedButton read FButtonPrint;
    property ButtonRotate  : TSpeedButton read FButtonRotate;
    property ButtonSave    : TSpeedButton read FButtonSave;
    property ButtonZoom    : TSpeedButton read FButtonZoom;

    property LabelText     : TLabel read FLabel;
    Procedure ShowValues;
  published
    {$IFNDEF TEEOCXNOEDITOR}
    property ChartEditor   : TChartEditor read FEditor write SetEditor;
    property Previewer     : TChartPreviewer read FPreviewer write SetPreviewer;
    {$ENDIF}

    property EnablePieExploding:Boolean read FEnablePieExp
                                        write FEnablePieExp default True;
    property LabelValues:Boolean read FLabelValues write SetLabelValues default True;
    property OnEditedChart:TTeeEditedChartEvent read FOnEditedChart
                                                write FOnEditedChart;
    property OnSetLabel:TTeeCommanderOnSetLabel read FOnSetLabel
                                                write FOnSetLabel;
  end;

implementation

{$IFDEF CLR}
{$R 'TeeCopy.bmp'}
{$R 'TeeDepth.bmp'}
{$R 'TeeEdit.bmp'}
{$R 'TeeMove.bmp'}
{$R 'TeeNormal.bmp'}
{$R 'TeePrint.bmp'}
{$R 'TeeRotate.bmp'}
{$R 'TeeZoom.bmp'}
{$R 'TeeView3D.bmp'}
{$R 'TeeSave.bmp'}
{$ELSE}
{$R TeeComma.res}
{$ENDIF}

Uses Math,
     {$IFNDEF TEEOCXNOEDITOR}
     TeeEditPro, EditChar, TeePrevi, TeeEdiGene,
     {$ENDIF}
     TeeProCo, TeeTools, TeEngine, TeCanvas;

{ TCustomTeeCommander }
Constructor TCustomTeeCommander.Create(AOwner:TComponent);
begin
  inherited;
  Panel:=nil;
  Height:=33;
  Width:=400;
  FMouseButton:=mbLeft;

  {$IFNDEF TEEOCX}
  ShowHint:=True;
  {$ENDIF}

  if (csDesigning in ComponentState) and
     (not (csLoading in Owner.ComponentState)) then Align:=alTop;
end;

Destructor TCustomTeeCommander.Destroy;
begin
  FreeOwnedControls;
  Panel:=nil;
  inherited;
end;

procedure TCustomTeeCommander.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited;
  if (Operation=opRemove) and Assigned(FPanel) and (AComponent=FPanel) then
     Panel:=nil;
end;

procedure TCustomTeeCommander.TeeEvent(Event:TTeeEvent);
begin
  if Event is TTeeMouseEvent then
  With TTeeMouseEvent(Event) do
  begin
    Case Event of
      meDown: begin
                FMouseButton:=Button;
                DoMouseDown(X,Y);
              end;
      meUp:  DoMouseUp;
      meMove: DoMouseMove(X,Y);
    end;
    Sender.CancelMouse:=not DoPanelMouse;
  end
  else
  if Event is TTeeView3DEvent then
     ShowHideControls(Assigned(Panel));
end;

Procedure TCustomTeeCommander.DoMouseDown(X,Y:Integer);
begin
end;

Procedure TCustomTeeCommander.DoMouseMove(X,Y:Integer);
begin
end;

Procedure TCustomTeeCommander.DoMouseUp;
begin
end;

Procedure TCustomTeeCommander.ShowHideControls(Value:Boolean);
Var t : Integer;
begin
  if not( csDestroying in ComponentState) then
     for t:=0 to ControlCount-1 do
         if Controls[t].Owner=Self then Controls[t].Enabled:=Value;
end;

Procedure TCustomTeeCommander.ReAlignTeeControls;
var t      : Integer;
    tmpPos : Integer;
begin
  tmpPos:=4;
  for t:=0 to ControlCount-1 do
  if Controls[t].Owner=Self then
  begin
    With Controls[t] do
    begin
      if FVertical then
      begin
        Left:=4;
        Top:=tmpPos;
      end
      else
      begin
        Left:=tmpPos;
        Top:=4;
      end;
    end;
    if Controls[t] is TBevel then
    begin
      Inc(tmpPos,4+2);
      with Controls[t] as TBevel do
      if FVertical then
      begin
        Shape:=bsTopLine;
        Width:=Self.Width-2*4;
        Height:=2;
      end
      else
      begin
        Shape:=bsLeftLine;
        Width:=2;
        Height:=Self.Height-2*4;
      end;
    end
    else Inc(tmpPos,25+4);
  end;
end;

procedure TCustomTeeCommander.SetVertical(Value:Boolean);
begin
  if FVertical<>Value then
  begin
    FVertical:=Value;
    if Align<>alNone then
       if FVertical then Align:=alLeft
                    else Align:=alTop;
    ReAlignTeeControls;
  end;
end;

{$IFNDEF CLR}
type
  TTeePanelAccess=class(TCustomTeePanel);
{$ENDIF}

procedure TCustomTeeCommander.SetPanel(const Value: TCustomTeePanel);
begin
  if Assigned(FPanel) then
  begin
    {$IFDEF D5}
    FPanel.RemoveFreeNotification(Self);
    {$ENDIF}
    {$IFNDEF CLR}TTeePanelAccess{$ENDIF}(FPanel).RemoveListener(Self);
  end;

  FPanel:=Value;

  if Assigned(FPanel) then
  begin
    FPanel.FreeNotification(Self);
    if Assigned({$IFNDEF CLR}TTeePanelAccess{$ENDIF}(FPanel).Listeners) then { 5.01 }
       {$IFNDEF CLR}TTeePanelAccess{$ENDIF}(FPanel).Listeners.Add(Self);
  end;

  if not (csDestroying in ComponentState) then
    ShowHideControls(Assigned(FPanel));
end;

procedure TCustomTeeCommander.Loaded;
var t : Integer;
begin
  inherited;

  if not Assigned(FPanel) then
  if Assigned(Parent) then
  begin
    if Parent is TCustomTeePanel then
       Panel:=TCustomTeePanel(Parent)
    else
    With Parent do
    for t:=0 to ComponentCount-1 do
      if Components[t] is TCustomTeePanel then
      begin
        Self.Panel:=TCustomTeePanel(Components[t]);
        break;
      end;
  end;

  ShowHideControls(Assigned(FPanel));
end;

Function TCustomTeeCommander.CreateButton( APos:Integer;
                                           AProc:TNotifyEvent;
                                           Const AHint:String;
                                           ABitmap: TBitmap;
                                           AGroupIndex:Integer):TSpeedButton;
begin
  result:=TSpeedButton.Create(Self);

  With result do
  begin
    OnClick:=AProc;
    if FVertical then SetBounds(4,APos,25,25)
                 else SetBounds(APos,4,25,25);
    Down:= True;
    Flat:= True;
    {$IFDEF TEEOCX}
    ShowHint:=True;
    {$ELSE}
    ParentShowHint:=True;
    {$ENDIF}
    Hint:=AHint;
    Parent:=Self;
    GroupIndex:=AGroupIndex;

    if Assigned(ABitmap) then
       Glyph.Assign(ABitmap);
  end;
end;

Function TCustomTeeCommander.CreateButton( APos:Integer;
                                           AProc:TNotifyEvent;
                                           Const AHint:String;
                                           Const AResName:String;
                                           AGroupIndex:Integer):TSpeedButton;
var Glyph : TBitmap;
begin
  Glyph:=TBitmap.Create;
  try
    if AResName<>'' then { 5.02 }
    begin
      {$IFDEF CLR}
      TeeLoadBitmap(Glyph,AResName,'');
      {$ELSE}
      Glyph.LoadFromResourceName(HInstance,AResName);
      {$ENDIF}
    end;

    result:=CreateButton(APos, AProc, AHint, Glyph, AGroupIndex);
  finally
    Glyph.Free;
  end;
end;

Function TCustomTeeCommander.DoPanelMouse:Boolean;
begin
  result:=True;
end;

Procedure TCustomTeeCommander.CreateBevel(APos:Integer);
begin
  With TBevel.Create(Self) do
  begin
    Shape:=bsLeftLine;
    Width:=2;
    Height:=Self.Height-4;
    Top:=2;
    Left:=APos;
    Parent:=Self;
  end;
end;

Function TCustomTeeCommander.CreateLabel(APos:Integer; AColor:TColor):TLabel;
begin
  result:=TLabel.Create(Self);
  With result do
  begin
    Left:=APos;
    Top:=12;
    Font.Name:=GetDefaultFontName;
    Font.Color:=AColor;
    Font.Size:=GetDefaultFontSize;
    Caption:='';
    Parent:=Self;
  end;
end;

Function TCustomTeeCommander.TeePanelClass:String;

⌨️ 快捷键说明

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