各位大俠:
    TreeView的TreeNode沒有Enable或則Disable屬性或則方法,請問有沒有什麽方法可以將一個TreeNode禁用掉啊?我的Delphi的版本是D6.
    另外:下面的網址里有C++的實現,但是小弟對C++不了解,所以各位大俠可以把它翻譯成Delphi語言嗎?謝謝!http://www.ccrun.com/article.asp?i=1015&d=r2tf61#

解决方案 »

  1.   


    procedure TForm1.TreeView1Changing(Sender: TObject; Node: TTreeNode;
      var AllowChange: Boolean);
    begin
       if Integer(node.Data) = 0 then
         AllowChange := False;
    end;你需要做的前期工作就是给不能用的node.Data赋值0,能用的赋值1
      

  2.   

    c++的那个是 把禁用的一个标志设成0,DrawItem的时候判断一下设成灰色,并且屏蔽掉Changing事件,
    与bdmh意思一样
      

  3.   

    procedure TForm1.TreeView1Changing(Sender: TObject; Node: TTreeNode;
      var AllowChange: Boolean);
    begin
      if Node.Text='1234' then
        AllowChange:=False
      else
        AllowChange:=True;
    end;procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
      Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
    begin
      if Node.Text='1234' then
        self.TreeView1.Canvas.Brush.Color:=clBtnFace
    end;可以实现某个节点底色为灰色,而且不能选择
      

  4.   

      var AllowChange: Boolean); 
    begin 
      if Node.Text='1234' then 
        AllowChange:=False 
      else 
        AllowChange:=True; 
    end; procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView; 
      Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); 
    begin 
      if Node.Text='1234' then 
        self.TreeView1.Canvas.Brush.Color:=clBtnFace 
    end; 
    正解
      

  5.   


    用node.text判断不好,不具备普遍性,通用性
      

  6.   

    首先謝謝各位的回復,可是現在的問題是我的這個TreeView帶有CheckBox。參考各位的代碼是可以反灰顯示,但是CheckBox還是可以選擇的。我現在把代碼貼出來(網上找的),希望能請教一下各位高手:如何禁用一個TreeNode,達到不能對禁用的TreeNode進行操作的功能?再次感謝各位!unit CheckTreeview;interfaceuses
       Windows, Messages, SysUtils, Classes, Controls,Commctrl,ComCtrls;
    const
        TVIS_CHECKED = $2000;
    type
       TCheckTreeview = class(TTreeView)
       private
         { Private declarations }
       protected
         { Protected declarations }
         procedure CreateParams(var Params: TCreateParams); override;
       public
         { Public declarations }
         function IsChecked(Node :TTreeNode) :Boolean;
         procedure SetChecked(Node :TTreeNode; Checked :Boolean);
       published
         { Published declarations }
       end;procedure Register;implementationprocedure Register;
    begin
       RegisterComponents('Standard', [TCheckTreeview]);
    end;{ TCheckTreeview }procedure TCheckTreeview.CreateParams(var Params: TCreateParams);
    begin
       inherited;
       Params.Style:=Params.Style or TVS_CHECKBOXES;
    end;function TCheckTreeview.IsChecked(Node: TTreeNode): Boolean;
    var
       TvItem :TTVItem;
    begin
       TvItem.Mask   := TVIF_STATE;
       TvItem.hItem := Node.ItemId;
       TreeView_GetItem(Node.TreeView.Handle, TvItem);
       Result := (TvItem.State and TVIS_CHECKED) = TVIS_CHECKED;
    end;procedure TCheckTreeview.SetChecked(Node: TTreeNode; Checked: Boolean);
    var
       TvItem :TTVItem;
    begin
       FillChar(TvItem, SizeOf(TvItem), 0);
       with TvItem do begin
         hItem      := Node.ItemId;
         Mask       := TVIF_STATE;
         StateMask := TVIS_STATEIMAGEMASK;
         if Checked then
           TvItem.State :=TVIS_CHECKED
         else
           TvItem.State :=TVIS_CHECKED shr 1;
         TreeView_SetItem(Node.TreeView.Handle, TvItem);
       end;
    end;
    end.
      

  7.   


    procedure TForm1.TreeView1Changing(Sender: TObject; Node: TTreeNode;
      var AllowChange: Boolean);
    begin
       if Integer(node.Data) = 0 then 
       begin
         SetChecked(Node,False);
         AllowChange := False;
       end
       else
       begin
         SetChecked(Node,True);
       end;
    end;
      

  8.   


    procedure TForm1.TreeView1Changing(Sender: TObject; Node: TTreeNode;
      var AllowChange: Boolean);
    var
      check:Boolean;
    begin
       check := IsChecked(Node); 
       if Integer(node.Data) = 0 then 
       begin
         SetChecked(Node,check);
         AllowChange := False;
       end
       else
       begin
         SetChecked(Node,True);//用自己需要的处理
       end;
    end;
    IsChecked,SetChecked取自TCheckTreeview 
      

  9.   


    IsChecked,SetChecked在TCheckTreeview中已經可以做到,是否有類似的IsEnabled,SetEnabled的方法可以將一個TreeNode禁用掉呢?
    謝謝!
      

  10.   


    treeview本身没有,你既然有IsChecked,SetChecked,为什么不用呢
      

  11.   


      比如CheckBox,我們可以設置它的check狀態,同時我們也可以設置其是否可用(Enabled),我想實現的也是類似這樣的一個效果,只是對象是一個TreeNode。請大家幫幫忙!謝謝!
      

  12.   

    除非你把他改装成自己的checktreeview吧
      

  13.   


    這樣也可以,相當于在CheckTreeView中添加功能進來,可是我比較菜,所以幫忙一下了!如果嫌分少的話,可以再加!
    謝謝!謝謝!
      

  14.   

    在这个类中CheckTreeView,公布一个属性即可,FChecked,和两个私有函数GetChecked,SetChecked,这两个函数分别实现IsChecked,SetChecked的功能property Checked:Boolean read GetChecked write SetCheked;