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

📄 treeed.pas

📁 TeeChart 7.0 With Source在Delphi 7.0中的安装
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  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 + -