teeanntooledit.pas

来自「Delphi TeeChartPro.6.01的源代码」· PAS 代码 · 共 279 行

PAS
279
字号
{**********************************************}
{   TeeChart Annotation Tool Editor            }
{   Copyright (c) 2000-2003 by David Berneda   }
{**********************************************}
unit TeeAnnToolEdit;
{$I TeeDefs.inc}

interface

uses {$IFNDEF LINUX}
     Windows, Messages,
     {$ENDIF}
     SysUtils, Classes,
     {$IFDEF CLX}
     QGraphics, QControls, QForms, QDialogs, QStdCtrls, QComCtrls,
     {$ELSE}
     Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls,
     {$ENDIF}
     TeeProcs, TeeTools, TeCanvas, TeeCustomShapeEditor, TeePenDlg;

type
  TAnnotationToolEdit = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Label1: TLabel;
    MemoText: TMemo;
    TabSheet2: TTabSheet;
    Label2: TLabel;
    CBPos: TComboFlat;
    CBCustPos: TCheckBox;
    Label4: TLabel;
    Label5: TLabel;
    ECustLeft: TEdit;
    UDLeft: TUpDown;
    ECustTop: TEdit;
    UDTop: TUpDown;
    Label3: TLabel;
    CBTextAlign: TComboFlat;
    TabSheet3: TTabSheet;
    BCalloutPen: TButtonPen;
    BCalloutPointer: TButton;
    GroupBox1: TGroupBox;
    Label6: TLabel;
    EX: TEdit;
    Label7: TLabel;
    EY: TEdit;
    Label8: TLabel;
    EZ: TEdit;
    CBCursor: TComboFlat;
    Label9: TLabel;
    Label10: TLabel;
    EArrowDist: TEdit;
    UDArrowDist: TUpDown;
    Label11: TLabel;
    CBHead: TComboFlat;
    Label12: TLabel;
    Edit1: TEdit;
    UDHeadSize: TUpDown;
    procedure FormShow(Sender: TObject);
    procedure EFormatChange(Sender: TObject);
    procedure CBPosChange(Sender: TObject);
    procedure ECustLeftChange(Sender: TObject);
    procedure CBCustPosClick(Sender: TObject);
    procedure ECustTopChange(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure CBTextAlignChange(Sender: TObject);
    procedure BCalloutPointerClick(Sender: TObject);
    procedure EXChange(Sender: TObject);
    procedure EYChange(Sender: TObject);
    procedure EZChange(Sender: TObject);
    procedure CBCursorChange(Sender: TObject);
    procedure EArrowDistChange(Sender: TObject);
    procedure CBHeadChange(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
  private
    { Private declarations }
    CreatingForm : Boolean;
    ShapeForm    : TFormTeeShape;
    Tool         : TAnnotationTool;
    Function CanChangePos:Boolean;
    Procedure EnableCustomPosition;
  public
    { Public declarations }
  end;

implementation

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

uses TeEngine, TeePoEdi;

procedure TAnnotationToolEdit.FormShow(Sender: TObject);
begin
  Tool:=TAnnotationTool(Tag);
  if Assigned(Tool) then
  begin
    ShapeForm.RefreshControls(Tool.Shape);

    With Tool do
    begin
      MemoText.Lines.Text:=Text;
      CBPos.ItemIndex:=Ord(Position);
      CBTextAlign.ItemIndex:=Ord(TextAlignment);

      With Shape do
      begin
        CBCustPos.Checked      :=CustomPosition;
        UDLeft.Position        :=Left;
        ECustLeft.Text         :=IntToStr(Left);
        UDTop.Position         :=Top;
        ECustTop.Text          :=IntToStr(Top);
      end;

      with Callout do
      begin
        BCalloutPen.LinkPen(Arrow);
        EX.Text:=IntToStr(XPosition);
        EY.Text:=IntToStr(YPosition);
        EZ.Text:=IntToStr(ZPosition);
        UDArrowDist.Position:=Distance;
        CBHead.ItemIndex:=Ord(ArrowHead);
        UDHeadSize.Position:=ArrowHeadSize;
      end;

      TeeFillCursors(CBCursor,Cursor);
    end;

    EnableCustomPosition;
  end;

  TeeTranslateControl(Self);
  CreatingForm:=False;
end;

procedure TAnnotationToolEdit.EFormatChange(Sender: TObject);

  Function RemoveLineFeeds(Const S:String):String;
  var i : Integer;
  begin
    result:=S;
    Repeat
      i:=Pos(#10,result);
      if i>0 then Delete(result,i,1);
    Until i=0;
  end;

begin
  if not CreatingForm then
     Tool.Text:=ReplaceChar(MemoText.Lines.Text,#10);
end;

procedure TAnnotationToolEdit.CBPosChange(Sender: TObject);
begin
  Tool.Position:=TAnnotationPosition(CBPos.ItemIndex);
  Tool.Shape.CustomPosition:=False;
  EnableCustomPosition;
end;

procedure TAnnotationToolEdit.ECustLeftChange(Sender: TObject);
begin
  if CanChangePos then Tool.Shape.Left:=UDLeft.Position
end;

procedure TAnnotationToolEdit.CBCustPosClick(Sender: TObject);
begin
  Tool.Shape.CustomPosition:=CBCustPos.Checked;
  EnableCustomPosition;
end;

procedure TAnnotationToolEdit.ECustTopChange(Sender: TObject);
begin
  if CanChangePos then Tool.Shape.Top:=UDTop.Position
end;

Function TAnnotationToolEdit.CanChangePos:Boolean;
begin
  result:=(not CreatingForm) and (Tool.Shape.CustomPosition);
end;

procedure TAnnotationToolEdit.FormCreate(Sender: TObject);
begin
  CreatingForm:=True;
  Align:=alClient; { 5.02 }
  ShapeForm:=InsertTeeObjectForm(PageControl1,nil);
  PageControl1.ActivePage:=TabSheet1;
end;

Procedure TAnnotationToolEdit.EnableCustomPosition;
var tmp : Boolean;
    Old : Boolean;
begin
  Old:=CreatingForm;
  CreatingForm:=True;

  tmp:=Tool.Shape.CustomPosition;

  ECustLeft.Enabled :=tmp;
  ECustTop.Enabled  :=tmp;
  UDLeft.Enabled    :=tmp;
  UDTop.Enabled     :=tmp;
  CBCustPos.Checked :=tmp;

  if tmp then
  begin
    UDLeft.Position :=Tool.Shape.Left;
    UDTop.Position  :=Tool.Shape.Top;
  end;

  CreatingForm:=Old;
end;

procedure TAnnotationToolEdit.CBTextAlignChange(Sender: TObject);
begin
  case CBTextAlign.ItemIndex of
    0: Tool.TextAlignment:=taLeftJustify;
    1: Tool.TextAlignment:=taCenter;
  else
    Tool.TextAlignment:=taRightJustify;
  end;
end;

procedure TAnnotationToolEdit.BCalloutPointerClick(Sender: TObject);
begin
  EditSeriesPointer(Self,Tool.Callout);
end;

procedure TAnnotationToolEdit.EXChange(Sender: TObject);
begin
  if Showing then
     with Tool.Callout do
          XPosition:=StrToIntDef(EX.Text,XPosition);
end;

procedure TAnnotationToolEdit.EYChange(Sender: TObject);
begin
  if Showing then
     with Tool.Callout do
          YPosition:=StrToIntDef(EY.Text,YPosition);
end;

procedure TAnnotationToolEdit.EZChange(Sender: TObject);
begin
  if Showing then
     with Tool.Callout do
          ZPosition:=StrToIntDef(EZ.Text,ZPosition);
end;

procedure TAnnotationToolEdit.CBCursorChange(Sender: TObject);
begin
  with Tool do
       Cursor:=TeeSetCursor(Cursor,CBCursor.Items[CBCursor.ItemIndex]);
end;

procedure TAnnotationToolEdit.EArrowDistChange(Sender: TObject);
begin
  if Showing then
     Tool.Callout.Distance:=UDArrowDist.Position;
end;

procedure TAnnotationToolEdit.CBHeadChange(Sender: TObject);
begin
  if Showing then
     Tool.Callout.ArrowHead:=TArrowHeadStyle(CBHead.ItemIndex);
end;

procedure TAnnotationToolEdit.Edit1Change(Sender: TObject);
begin
  if Showing then
     Tool.Callout.ArrowHeadSize:=UDHeadSize.Position;
end;

initialization
  RegisterClass(TAnnotationToolEdit);
end.

⌨️ 快捷键说明

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