CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

急!求带CHECKBOX的TREEVIEW控件!

楼主tzs_0717(消防员)2002-06-06 11:03:44 在 Delphi / VCL组件开发及应用 提问

各位大虾帮帮忙,要求CHECKBOX有三种状态:打勾的,不打勾的和打勾带阴影的,谢谢了! 问题点数:100、回复次数:5Top

1 楼dreamfan(改行不做程序员,回家种地。)回复于 2002-06-06 11:09:04 得分 10

dxexpressTop

2 楼9527(做人好累,下辈子我要做棵大树)回复于 2002-06-06 11:12:06 得分 10

1stclass不行吗Top

3 楼debussy(debussy)回复于 2002-06-06 11:16:30 得分 30

其实这个可以自己做的,就是处理每个节点的ImageIndex就行了,你画表示三种状态的图标,然后判断当前节点的状态,切换到对应的ImageIndex就好了阿。Top

4 楼netlib(河外孤星)回复于 2002-06-06 11:25:27 得分 50

自己写  
  下面是个例子  
      TTreeView的结点如何具有CheckBox?  
  TreeView有个Images属性,做三张小图片:  
  全选中、部分选中、不选状态(直接拍下CheckBox三种状态的图片在加工一下就可以了),然后在点击事件中根据具体情况设置TTreeNodes的ImageIndex就OK了。  
  重载TreeView的CreateParams:  
  type  
      TCheckBoxTreeView   =   class(TTreeView)  
      protected  
          procedure   CreateParams(var   Params:   TCreateParams);   override;  
      end;  
   
  procedure   TCheckBoxTreeView.CreateParams(var   Params:   TCreateParams);  
  begin  
      inherited;  
      Params.Style:=Params.Style   or   TVS_CHECKBOXES;    
      {   TVS_CHECKBOXES   declared   in   CommCtrl   }  
  end;  
   
  如果要Check这个CheckBox,可以用下面的代码:  
  function   IsNodeChecked(Node   :TTreeNode)   :Boolean;  
  const  
      TVIS_CHECKED   =   $2000;  
  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   SetNodeChecked(Node   :TTreeNode;   Checked   :Boolean);  
  const  
      TVIS_CHECKED   =   $2000;  
  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;  
  可以做成事件和封装成一个类:  
  private   OldState   :Boolean;  
   
  procedure   Change(Node:   TTreeNode);   override;  
  begin  
      inherited   Change(Node);  
      OldState   :=   IsNodeChecked(Node);  
  end;  
   
  procedure   Click;   override;  
  var  
      NewState   :Boolean;  
  begin  
      inherited   Click;  
      NewState   :=   IsNodeChecked(Self.Selected);  
      if   NewState   =   OldState   then   Exit;  
      if   (NewState)   and   Assigned(OnNodeChecked)   then   OnNodeChecked()  
      else   if   (not   NewState)   and   Assigned(OnNodeUnChecked)   then    
  OnNodeUnChecked()  
   
  //   OnNodeChecked   &   OnNodeUnchecked   will   be   events   that   you   declare  
  end;  
  Top

5 楼tzs_0717(消防员)回复于 2002-06-06 12:13:09 得分 0

哪里可以有1stclass?Top

相关问题

  • 寻找TreeView控件------->急!
  • 关于控件treeview急!!!!!!!!!!!!
  • 高分求带checkbox的treeview控件(delphi5)
  • treeview控件 checkbox控制的问题
  • 如何做到 带 CheckBox 的 TreeView 控件?
  • TREEVIEW控件
  • 求treeview控件
  • treeview控件
  • TreeView控件
  • 求TreeView控件

关键词

  • tvitem
  • checkbox
  • tvis
  • treeview
  • createparams
  • ttreenode
  • imageindex
  • 状态
  • checked
  • node

得分解答快速导航

  • 帖主:tzs_0717
  • dreamfan
  • 9527
  • debussy
  • netlib

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo