www.pudn.com > TreeView_Sample.rar > frmMainUnit.pas


unit frmMainUnit; 
 
interface 
 
uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, ComCtrls, StdCtrls, Buttons, 
  TreeUtils, ActnList, ExtCtrls, ImgList, Menus; 
 
type 
  TfrmMain = class(TForm) 
    TreeView1: TTreeView; 
    StatusBar1: TStatusBar; 
    ActionList1: TActionList; 
    acAdd: TAction; 
    acAddChild: TAction; 
    Panel1: TPanel; 
    ImageList1: TImageList; 
    Panel2: TPanel; 
    btnDelete: TButton; 
    btnAddChild: TBitBtn; 
    btnAdd: TBitBtn; 
    edtCaption: TEdit; 
    Label2: TLabel; 
    Panel3: TPanel; 
    acDelete: TAction; 
    PopupMenu1: TPopupMenu; 
    N1: TMenuItem; 
    N2: TMenuItem; 
    N3: TMenuItem; 
    Label1: TLabel; 
    Label3: TLabel; 
    Label4: TLabel; 
    Label5: TLabel; 
    lblNodeCaption: TLabel; 
    lblNodeIndex: TLabel; 
    lblParentCaption: TLabel; 
    lblParentIndex: TLabel; 
    Bevel1: TBevel; 
    Splitter1: TSplitter; 
    acEdit: TAction; 
    N4: TMenuItem; 
    N5: TMenuItem; 
    procedure TreeView1Change(Sender: TObject; Node: TTreeNode); 
    procedure FormCreate(Sender: TObject); 
    procedure acAddExecute(Sender: TObject); 
    procedure acAddChildExecute(Sender: TObject); 
    procedure FormClose(Sender: TObject; var Action: TCloseAction); 
    procedure acDeleteExecute(Sender: TObject); 
    procedure TreeView1Edited(Sender: TObject; Node: TTreeNode; 
      var S: string); 
    procedure acEditExecute(Sender: TObject); 
    procedure TreeView1DragOver(Sender, Source: TObject; X, Y: Integer; 
      State: TDragState; var Accept: Boolean); 
    procedure TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer); 
  private 
    { Private declarations } 
  public 
    { Public declarations } 
    TreeUtil: TTreeUtils; 
  end; 
 
var 
  frmMain: TfrmMain; 
 
implementation 
 
uses DMUnit, TreeFillThrd; 
 
{$R *.dfm} 
 
procedure TfrmMain.TreeView1Change(Sender: TObject; Node: TTreeNode); 
var Nod: TNodeData; 
  // S: string; 
begin 
  //  S := 'AbsIndex:[' + IntToStr(TreeView1.Selected.AbsoluteIndex); 
  //  S := S + '] Text:[' + TreeView1.Selected.Text; 
  //  S := S + '] Index:[' + IntToStr(TreeUtil.getSelNodeIndex); 
  //  S := S + '] Caption:[' + TreeUtil.getSelNodeCaption + ']'; 
  //  S := S + '] Caption:[' + PNodeData(TreeView1.Selected.Data)^.Caption; 
  //  StatusBar1.Panels.Items[0].Text := S; 
  lblNodeCaption.Caption := TreeUtil.getSelNodeCaption; 
  lblNodeIndex.Caption := IntToStr(TreeUtil.getSelNodeIndex); 
  Nod := TreeUtil.getTreeNodeData(TreeView1.Selected.Parent); 
  lblParentCaption.Caption := Nod.Caption; 
  lblParentIndex.Caption := IntToStr(Nod.Index); 
end; 
 
procedure TfrmMain.acEditExecute(Sender: TObject); 
begin 
  TreeView1.Selected.EditText; 
end; 
 
procedure TfrmMain.FormCreate(Sender: TObject); 
begin 
  TreeUtil := TTreeUtils.Create(TreeView1, DM.Conn, 'Dir'); 
  TreeUtil.FillTree; 
end; 
 
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction); 
begin 
  TreeUtil.Free; 
end; 
 
procedure TfrmMain.acAddExecute(Sender: TObject); 
begin 
  TreeUtil.AddNode(edtCaption.Text); 
end; 
 
procedure TfrmMain.acAddChildExecute(Sender: TObject); 
begin 
  TreeUtil.AddChildNode(edtCaption.Text); 
end; 
 
procedure TfrmMain.acDeleteExecute(Sender: TObject); 
begin 
  if MessageBox(handle, PChar('你确认要删除"' + TreeView1.Selected.Text + '"吗?'), 
    '提示', MB_ICONQUESTION + MB_YESNO) = IDYES then 
    TreeUtil.DeleteTree(TreeView1.Selected); 
end; 
 
procedure TfrmMain.TreeView1Edited(Sender: TObject; Node: TTreeNode; 
  var S: string); 
begin 
  //修改Node的文本 
  TreeUtil.ModifyNodeCaption(S, Node) 
end; 
 
procedure TfrmMain.TreeView1DragOver(Sender, Source: TObject; X, 
  Y: Integer; State: TDragState; var Accept: Boolean); 
begin 
  if Source = TreeView1 then Accept := True 
  else Accept := False; 
end; 
 
procedure TfrmMain.TreeView1DragDrop(Sender, Source: TObject; X, 
  Y: Integer); 
var TargetNode, SourceNode: TTreeNode; 
begin 
  TargetNode := TreeView1.DropTarget; 
  SourceNode := TreeView1.Selected; 
  if MessageBox(handle, '您确认要异动目录吗?', '提示', MB_ICONQUESTION 
    + MB_YESNO) = IDYES then 
    if TreeUtil.ModifyNodePID(PNodeData(TargetNode.Data)^.Index, SourceNode) then 
      TreeUtil.FillTree; 
end; 
 
end.