📄 teeedittools.pas
字号:
{******************************************}
{ TeeChart Tools Editor }
{ Copyright (c) 2000-2005 by David Berneda }
{******************************************}
unit TeeEditTools;
{$I TeeDefs.inc}
interface
uses {$IFNDEF LINUX}
Windows, Messages,
{$ENDIF}
SysUtils, Classes,
{$IFDEF CLX}
QGraphics, QControls, QForms, QDialogs, QExtCtrls, QStdCtrls, QButtons,
Types,
{$ELSE}
Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons,
{$ENDIF}
TeCanvas, TeEngine, Chart, TeePenDlg, TeeProcs;
type
TFormTeeTools = class(TForm)
LBTools: TListBox;
PanelToolEditor: TPanel;
PTop: TPanel;
BAdd: TButton;
BDelete: TButton;
CBActive: TCheckBox;
PBottom: TPanel;
Splitter1: TSplitter;
Panel2: TPanel;
BMoveUp: TSpeedButton;
BMoveDown: TSpeedButton;
CBShowInEditor: TCheckBox;
procedure LBToolsClick(Sender: TObject);
procedure BDeleteClick(Sender: TObject);
procedure CBActiveClick(Sender: TObject);
procedure BAddClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BMoveUpClick(Sender: TObject);
procedure BMoveDownClick(Sender: TObject);
{$IFNDEF CLX}
procedure LBToolsDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
{$ELSE}
procedure LBToolsDrawItem(Sender: TObject; Index: Integer; Rect: TRect;
State: TOwnerDrawState; var Handled: Boolean);
{$ENDIF}
procedure CBShowInEditorClick(Sender: TObject);
private
{ Private declarations }
{$IFDEF CLX}
ICreating : Boolean;
{$ENDIF}
{$IFDEF TEEOCX}
function TeeAXGetUniqueName(Const AStartName:String):String;
{$ENDIF}
Function CurrentTool:TTeeCustomTool;
procedure DeleteForm;
procedure EnableButtons;
procedure FillAndSet;
procedure FillTools;
procedure SwapTool(A,B:Integer);
{$IFNDEF CLX}
procedure CMShowingChanged(var Message: TMessage); message CM_SHOWINGCHANGED;
{$ENDIF}
protected
OnAdded, OnDeleted : TNotifyEvent; // 6.02
public
{ Public declarations }
Chart : TCustomChart;
Procedure Reload;
end;
implementation
{$IFNDEF CLX}
{$IFNDEF LCL}
{$R *.DFM}
{$ENDIF}
{$ELSE}
{$R *.xfm}
{$ENDIF}
Uses TeeConst, TeeToolsGallery;
procedure TFormTeeTools.FillTools;
var t : Integer;
begin
PBottom.Caption:='';
With LBTools do
begin
Clear;
for t:=0 to Chart.Tools.Count-1 do
if (csDesigning in Chart.Tools[t].ComponentState) or
Chart.Tools[t].ShowInEditor then
Items.AddObject(Chart.Tools[t].Description,Chart.Tools[t]);
end;
CBActive.Enabled:=LBTools.Items.Count>0;
BDelete.Enabled:=CBActive.Enabled;
end;
type TToolAccess=class(TTeeCustomTool);
procedure TFormTeeTools.DeleteForm;
begin
if PanelToolEditor.ControlCount>0 then
PanelToolEditor.Controls[0].Free;
end;
procedure TFormTeeTools.LBToolsClick(Sender: TObject);
var tmpClass : TClass;
tmp : TForm;
begin
{$IFDEF CLX}
if not ICreating then
if (PanelToolEditor.ControlCount=0) or
(PanelToolEditor.Controls[0].Tag<>Integer(CurrentTool)) then
{$ENDIF}
if CurrentTool<>nil then
begin
if PanelToolEditor.ControlCount>0 then
begin
if not TForm(PanelToolEditor.Controls[0]).CloseQuery then
LBTools.ItemIndex:=Chart.Tools.IndexOf(TTeeCustomTool(PanelToolEditor.Controls[0].Tag));
end;
CBActive.Checked:=CurrentTool.Active;
DeleteForm;
tmpClass:=GetClass(TToolAccess(CurrentTool).GetEditorClass);
if Assigned(tmpClass) then
begin
tmp:=TFormClass(tmpClass).Create(Self);
TeeTranslateControl(tmp);
tmp.Align:=alClient;
AddFormTo(tmp,PanelToolEditor,CurrentTool);
end;
CBShowInEditor.Visible:=csDesigning in CurrentTool.ComponentState;
if CBShowInEditor.Visible then
begin
CBShowInEditor.Checked:=CurrentTool.ShowInEditor;
CBActive.Top:=3;
end;
EnableButtons;
if PBottom.Visible and (CurrentTool<>nil) then
PBottom.Caption:=CurrentTool.Name;
end;
end;
procedure TFormTeeTools.BDeleteClick(Sender: TObject);
var tmp : Integer;
begin
if (CurrentTool<>nil) and { 5.01 }
TeeYesNoDelete(CurrentTool.Description,Self) then
begin
tmp:=LBTools.ItemIndex;
if Assigned(OnDeleted) then
OnDeleted(CurrentTool);
CurrentTool.Free;
DeleteForm;
FillTools;
With LBTools do { 5.01 }
if tmp>1 then
ItemIndex:=tmp-1
else
if Items.Count>0 then ItemIndex:=Items.Count-1;
BDelete.Enabled:=LBTools.ItemIndex<>-1;
if BDelete.Enabled then LBToolsClick(Self);
end;
end;
procedure TFormTeeTools.CBActiveClick(Sender: TObject);
begin
CurrentTool.Active:=CBActive.Checked;
end;
{$IFDEF TEEOCX}
function TFormTeeTools.TeeAXGetUniqueName(Const AStartName:String):String;
var i,tmp: integer;
Begin
tmp:=0;
for i:=0 to Chart.Tools.Count-1 do
Begin
if Chart.Tools.Items[i].Name=AStartName+TeeStr(tmp) then
inc(tmp)
else
break;
end;
result:=AStartName+TeeStr(tmp);
end;
{$ENDIF}
procedure TFormTeeTools.BAddClick(Sender: TObject);
var AOwner : TComponent;
t : Integer;
tmpTool : TTeeCustomTool;
begin
With TTeeToolsGallery.Create(Owner) do
try
{$IFDEF D5}
if Assigned(Owner) then Position:=poOwnerFormCenter
else
{$ENDIF}
Position:=poScreenCenter;
if ShowModal=mrOk then
begin
{$IFDEF CLX}
ICreating:=True;
{$ENDIF}
AOwner:=Chart.Owner;
for t:=0 to Chart.Tools.Count-1 do { 5.01 }
if Chart.Tools[t].Owner=Chart then
begin
AOwner:=Chart;
break;
end;
tmpTool:=SelectedTool.Create(AOwner);
with tmpTool do
begin
ParentChart:=Chart;
{$IFNDEF TEEOCX}
Name:=TeeGetUniqueName(AOwner,TeeMsg_DefaultToolName);
{$ELSE}
//due to Owner=nil in ocx version
Name:=TeeAXGetUniqueName(TeeMsg_DefaultToolName);
{$ENDIF}
end;
if Assigned(OnAdded) then
OnAdded(tmpTool);
FillTools;
{$IFDEF CLX}
ICreating:=False;
{$ENDIF}
LBTools.ItemIndex:=LBTools.Items.Count-1;
{$IFDEF TEEOCX}
if GetParentForm(Self)<>nil then
{$ENDIF}
LBTools.SetFocus;
LBToolsClick(Self);
end;
finally
Free;
end;
end;
function TFormTeeTools.CurrentTool: TTeeCustomTool;
begin
if LBTools.ItemIndex=-1 then
result:=nil
else
result:=TTeeCustomTool(LBTools.Items.Objects[LBTools.ItemIndex]);
end;
procedure TFormTeeTools.FillAndSet;
begin
FillTools;
With LBTools do
if Items.Count>0 then
begin
ItemIndex:=0;
LBToolsClick(Self);
end
else EnableButtons;
end;
procedure TFormTeeTools.FormShow(Sender: TObject);
begin
Chart:=TCustomChart(Tag);
if Assigned(Chart) then
begin
PBottom.Visible:=csDesigning in Chart.ComponentState;
FillAndSet;
end;
{$IFDEF CLX}
ICreating:=False;
if LBTools.Items.Count>0 then
begin
if LBTools.ItemIndex=-1 then LBTools.ItemIndex:=0;
LBToolsClick(Self);
end;
{$ENDIF}
TeeTranslateControl(Self);
end;
procedure TFormTeeTools.FormCreate(Sender: TObject);
begin
{$IFDEF CLX}
ICreating:=True;
{$ENDIF}
TeeLoadArrowBitmaps(BMoveUp.Glyph,BMoveDown.Glyph);
end;
procedure TFormTeeTools.SwapTool(A,B:Integer);
var tmpIndex : Integer;
begin
LBTools.Items.Exchange(A,B);
{$IFDEF CLX}
if LBTools.ItemIndex=A then
LBTools.ItemIndex:=B;
{$ENDIF}
LBTools.Invalidate;
With Chart do
begin
Tools.Exchange(A,B);
tmpIndex:=Tools[A].ComponentIndex;
Tools[A].ComponentIndex:=Tools[B].ComponentIndex;
Tools[B].ComponentIndex:=tmpIndex;
Invalidate;
end;
EnableButtons;
end;
procedure TFormTeeTools.EnableButtons;
begin
With LBTools do
begin
BMoveUp.Enabled :=ItemIndex>0;
BMoveDown.Enabled:=ItemIndex<Items.Count-1;
end;
end;
procedure TFormTeeTools.BMoveUpClick(Sender: TObject);
begin
With LBTools do SwapTool(ItemIndex,ItemIndex-1);
end;
procedure TFormTeeTools.BMoveDownClick(Sender: TObject);
begin
With LBTools do SwapTool(ItemIndex,ItemIndex+1);
end;
Procedure TFormTeeTools.Reload;
begin
if Chart<>nil then
if Chart.Tools.Count<>LBTools.Items.Count then FillAndSet;
if LBTools.ItemIndex<>-1 then LBToolsClick(Self);
end;
{$IFNDEF CLX}
procedure TFormTeeTools.LBToolsDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
{$ELSE}
procedure TFormTeeTools.LBToolsDrawItem(Sender: TObject; Index: Integer;
Rect: TRect; State: TOwnerDrawState; var Handled: Boolean);
{$ENDIF}
begin
TeeDrawTool(LBTools,Index,Rect,State,TTeeCustomTool(LBTools.Items.Objects[Index]));
end;
{$IFNDEF CLX}
procedure TFormTeeTools.CMShowingChanged(var Message: TMessage);
begin
inherited;
if Assigned(Parent) then
Parent.UpdateControlState;
end;
{$ENDIF}
procedure TFormTeeTools.CBShowInEditorClick(Sender: TObject);
begin
CurrentTool.ShowInEditor:=CBShowInEditor.Checked;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -