📄 treeed.pas
字号:
begin
Parent:=ATab;
Flat:=True;
AllowAllUp:=False;
GroupIndex:=1;
Hint:=AName;
ShowHint:=True;
SetBounds(SpeedLink.Left+SpeedLink.Width+4+29*Num,SpeedLink.Top,SpeedLink.Width,SpeedLink.Height);
{$IFDEF CLR}
TagShapeStyle:=PTreeTagShape.Create;
{$ELSE}
New(TagShapeStyle);
{$ENDIF}
TagShapeStyle.UseStyle:=UseStyle;
if UseStyle then
begin
TagShapeStyle.Style:=AStyle;
TagShapeStyle.AClass:=TTreeNodeShape;
end
else TagShapeStyle.AClass:=AClass;
TagShapeStyle.AInstance:=nil;
Tag:={$IFDEF CLR}Variant{$ELSE}Integer{$ENDIF}(TagShapeStyle);
if (AClass=TPolygonShape) or (AClass=TPolyLineShape) then
OnClick:=SpeedPolygonClick
else
OnClick:=SpeedClick;
OnDblClick:=SpeedDouble;
end;
end;
type TTreeAccess=class(TTree);
procedure TTreeEditor.SpeedClick(Sender: TObject);
begin
SpeedNormalClick(Sender);
TTreeAccess(TheTree).IZoomPriority:=not ComingFromDoubleClick;
if ComingFromDoubleClick then
begin
ComingFromDoubleClick:=False;
SpeedNormal.Down:=True;
end;
end;
type TSpeedButtonAccess=class(TSpeedButton);
procedure TTreeEditor.SpeedDouble(Sender: TObject);
var P : PTreeTagShape;
begin
P:=PTreeTagShape(TSpeedButton(Sender).Tag);
if (not (P.AClass=TPolygonShape)) and
(not (P.AClass=TPolyLineShape)) then
begin
AddNewShape(P,TeeRect(0,0,0,0));
TTreeAccess(TheTree).IZoomPriority:=False;
FillNodeTree;
TeeModified;
TimerButton.Enabled:=True;
ComingFromDoubleClick:=True;
end;
end;
Procedure TTreeEditor.RefreshZoomLabel;
begin
Label5.Caption:=TeeStr(TrackBarZoom.Position)+'%';
end;
type TPanelAccess=class(TCustomPanel);
procedure TTreeEditor.FormShow(Sender: TObject);
Procedure FillComboBrushes;
var t : Integer;
begin
for t:=0 to TreeImagePool.Count-1 do
ComboBrush.Items.Add('');
end;
var tmpLoaded : Boolean;
begin
DisableAlign;
tmpLoaded:=False;
try
if not Assigned(TheTree) then
begin
CreateNewTree;
if PersistOptions then
begin
LoadEditorParameters;
tmpLoaded:=True;
end;
end;
SaveOldTreeSettings;
finally
SetTreeSettings;
if PersistOptions and (not tmpLoaded) then LoadEditorParameters;
PageTree.ActivePage:=TabGeneral;
TheTree.Visible:=True;
{$IFNDEF CLX}
ShowWindow(TheTree.Handle,SW_SHOW);
{$ENDIF}
ButtonNew.Caption:='';
ButtonOpen.Caption:='';
ButtonPrint.Caption:='';
ButtonPrintPreview.Caption:='';
ButtonZoomIn.Caption:='';
ButtonZoomOut.Caption:='';
if IsWindowsNT then
ComboPenStyle.Items.Add(TeeMsg_SmallDotsPen);
FillComboBrushes;
FillNodeTree;
Creating:=False;
MainSetCaption;
SetInspectorProperties;
EnableAlign;
end;
end;
procedure TTreeEditor.CBGridClick(Sender: TObject);
begin
if not Creating then
begin
TheTree.Grid.Visible:=CBGrid.Checked;
TeeModified;
end;
end;
type TInternalLoadTree=class(TCustomTree);
procedure TTreeEditor.FormClose(Sender: TObject; var Action: TCloseAction);
procedure ClearToolShapes;
var t,tt : Integer;
ATab : TTabSheet;
{$IFDEF CLR}
tmpTag : Variant;
tmpIsNil : Boolean;
tmpIsNull : Boolean;
{$ENDIF}
begin
for t:=0 to PageShapes.PageCount-1 do
begin
ATab:=PageShapes.Pages[t];
for tt:=0 to ATab.ControlCount-1 do
{$IFNDEF CLR}
With ATab.Controls[tt] do
{$ENDIF}
begin
{$IFDEF CLR}
tmpTag:=ATab.Controls[tt].Tag;
tmpIsNull:=not Assigned(tmpTag);
tmpIsNil:=tmpTag=nil;
{$ENDIF}
if {$IFDEF CLR}not tmpIsNil{$ELSE}Tag>0{$ENDIF} then
begin
PTreeTagShape(Tag){$IFNDEF CLR}^{$ENDIF}.AInstance.Free;
{$IFDEF CLR}
PTreeTagShape(Tag).Free;
{$ELSE}
Dispose(PTreeTagShape(Tag));
{$ENDIF}
end;
end;
end;
end;
begin
Timer1.Enabled:=False;
TheTree.StopConnecting;
TheTree.StopEditing;
if PersistOptions then
SaveEditorParameters; // store at Registry editor options
// Restore Tree original properties...
TInternalLoadTree(TheTree).SetDesigning(OldDesignState);
With TheTree do
begin
StopEditing;
Selected.Clear;
Visible :=OldVisible;
Align :=OldAlign;
Anchors :=OldAnchors;
Grid.Visible :=OldGrid;
Designing :=OldDesigning;
AllowZoom :=OldZoom;
AllowPanning :=OldPanning;
BoundsRect :=OldBounds;;
DragMode :=OldDragMode;
PopupMenu :=OldPopup;
{ events }
SetEvents(SavedEvents);
OnZoomedArea:=nil;
OnDblClick:=OldDblClick;
Parent:=OldParent;
end;
{ remove and free shapes from toolbar }
// Note: Not necessary in .Net
{$IFNDEF CLR}
ClearToolShapes;
{$ENDIF}
// Store at Registry the list of recently opened files...
FRecentFiles.WriteRegistry(TeeTreeRecentKey);
FreeAndNil(FRecentFiles);
TreeUndo.Free;
end;
procedure TTreeEditor.AddBrother1Click(Sender: TObject);
begin
if TheTree.Selected.Count>0 then
With TheTree.Selected.First do
if Assigned(Parent) then
begin
with AddBrother('') do
begin
Assign(TheTree.Selected.First);
Text.Clear;
Text.Add(TreeMsg_Child+' '+TeeStr(Parent.Childs.Count));
Selected:=True;
end;
Selected:=False;
FillNodeTree;
TeeModified;
end;
end;
procedure TTreeEditor.AddChild1Click(Sender: TObject);
begin
if TheTree.Selected.Count>0 then
With TheTree.Selected.First do
begin
Expanded:=True;
AddChild(TreeMsg_Child+' '+TeeStr(Childs.Count+1)).Selected:=True;
Selected:=False;
FillNodeTree;
TeeModified;
end;
end;
procedure TTreeEditor.DoBringtoFront(Sender: TTreeNodeShape);
begin
Sender.BringToFront;
end;
// Moves selected nodes to "front"
procedure TTreeEditor.BringtoFront1Click(Sender: TObject);
begin
TheTree.Selected.ForEach(DoBringToFront);
TeeModified;
end;
procedure TTreeEditor.Copy1Click(Sender: TObject);
begin
TreeClipboard.Copy(TheTree);
end;
procedure TTreeEditor.Cut1Click(Sender: TObject);
begin
TreeClipboard.Cut(TheTree);
FillNodeTree;
end;
procedure TTreeEditor.Delete1Click(Sender: TObject);
begin
TheTree.Selected.Delete;
end;
procedure TTreeEditor.Edit1Click(Sender: TObject);
begin
if TheTree.Selected.Count>0 then
begin
EditTreeShape(Self,TheTree.Selected.First);
SetToolBars;
TeeModified;
end;
end;
procedure TTreeEditor.Paste1Click(Sender: TObject);
begin
TreeClipboard.Paste(TheTree);
FillNodeTree;
TeeModified;
end;
procedure TTreeEditor.PopupNodePopup(Sender: TObject);
begin
Paste1.Enabled:=TreeClipboard.Roots.Count>0;
AddBrother1.Enabled:=(TheTree.Selected.Count>0) and
(TheTree.Selected.First.Parent<>nil);
Copy1.Enabled:=TheTree.Selected.Count>0;
Cut1.Enabled:=Copy1.Enabled;
Delete1.Enabled:=Copy1.Enabled;
Edit1.Enabled:=Copy1.Enabled;
BringToFront1.Enabled:=Copy1.Enabled;
SendToBack1.Enabled:=Copy1.Enabled;
AlignToGrid1.Enabled:=Copy1.Enabled;
Sizetogrid1.Enabled:=Copy1.Enabled;
AddChild1.Enabled:=Copy1.Enabled;
AddBrother1.Enabled:=Copy1.Enabled and Assigned(TheTree.Selected.First.Parent);
Prune1.Enabled:=AddBrother1.Enabled;
ShowNames1.Visible:=TPopupMenu(Sender).PopupComponent=NodeTree;
end;
procedure TTreeEditor.DoSendToBack(Sender: TTreeNodeShape);
begin
Sender.SendToBack;
end;
procedure TTreeEditor.SendtoBack1Click(Sender: TObject);
begin
TheTree.Selected.ForEach(DoSendToBack);
TeeModified;
end;
Procedure TTreeEditor.RefreshStatusBar;
var P : TPoint;
tmpNode : TTreeNodeShape;
tmpConn : TTreeConnection;
begin
With TheTree do
begin
P:=GetCursorPos;
{ show at status bar the shape under the mouse }
tmpNode:=ClickedShape(P.x,P.y);
if Assigned(tmpNode) then
begin
StatusBar1.Panels[stPanelName].Text:=tmpNode.Name;
if tmpNode.Text.Count>0 then
StatusBar1.Panels[stPanelText].Text:=tmpNode.SimpleText
else
StatusBar1.Panels[stPanelText].Text:='';
StatusBar1.Panels[stPanelCoords].Text:=
TeeStr(tmpNode.x0)+','+TeeStr(tmpNode.y0)+' '+
TeeStr(tmpNode.Width)+','+TeeStr(tmpNode.Height);
end
else
{ try with connections... }
begin
tmpConn:=Connections.Clicked(P.x,P.y);
if Assigned(tmpConn) then
begin
StatusBar1.Panels[stPanelName].Text:=tmpConn.Name;
StatusBar1.Panels[stPanelText].Text:='';
end
else
{ clear status bar }
begin
StatusBar1.Panels[stPanelName].Text:='';
StatusBar1.Panels[stPanelText].Text:='';
Canvas.Calculate2DPosition(P.X,P.Y,0);
StatusBar1.Panels[stPanelCoords].Text:=TeeStr(P.x)+','+TeeStr(P.y);
end;
end;
end;
end;
procedure TTreeEditor.TheTreeMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
RefreshStatusBar;
end;
Procedure TTreeEditor.TryPopup(ATree:TCustomTree; x,y:Integer);
var P : TPoint;
tmp : TPopupMenu;
begin
SpeedNormal.Down:=True;
if Assigned(TheTree.Connections.Selected) then
begin
// Show connection popup, or connection point popup
PopupPoint.Tag:=TheTree.Connections.Selected.Points.Clicked(x,y);
if PopupPoint.Tag<>-1 then tmp:=PopupPoint
else tmp:=PopupConn
end
else
tmp:=PopupNode; // Node popup menu
// Show menu
tmp.PopupComponent:=ATree;
P:=ATree.ClientToScreen(TeePoint(x,y));
OldCursorPos := Point(X,Y); //tom:25/09/2002
tmp.Popup(P.x,P.y)
end;
procedure TTreeEditor.ChangeFont(Sender: TTreeNodeShape);
begin
Sender.Font.Name:=ComboFonts.Items[ComboFonts.ItemIndex];
end;
procedure TTreeEditor.ChangeFontAttrib(Sender: TTreeNodeShape);
begin
Sender.Font.Style:=GetFontAttribute;
end;
Function TTreeEditor.GetFontSize:Integer;
begin
with ComboFontSize do
if ItemIndex=-1 then result:=StrToIntDef(Text,0)
else result:=StrToInt(Items[ItemIndex]);
end;
procedure TTreeEditor.ChangeFontSize(Sender: TTreeNodeShape);
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -