关于原版TreeView的使用

--  作者:贾渊
--  发布时间:2010-4-24 7:46:08
--  [原创]关于原版TreeView的使用

D7中原版的TreeView就很好用,但是却没有一个属性可以直接设置节点的CheckBox,经过摸索,找到一个较好的解决方案。

  1. const 
  2. TVS_CHECKBOXES = $00000100
  3.  
  4. procedure TForm1.SetComCtrlStyle(WinCtrl: TWinControl; Value: Integer; UseStyle: Boolean); 
  5. var 
  6. Style: Integer; 
  7. begin 
  8.    if WinCtrl.HandleAllocated then 
  9.    begin 
  10.      Style := GetWindowLong(WinCtrl.Handle, GWL_STYLE); 
  11.      if not UseStyle then 
  12.      Style := Style and not Value 
  13.      else Style := Style or Value; 
  14.      SetWindowLong(WinCtrl.Handle, GWL_STYLE, Style); 
  15.    end
  16. end

 

然后在Form.Create事件中调用即可:

  1. SetComCtrlStyle(TreeView1, TVS_CHECKBOXES, True); 

 

另外,也可以把上述语句直接简化成一句,只不过对于不熟悉API的人来说,可读性是差了一些:

  1. SetWindowLong(TreeView1.Handle, GWL_STYLE, GetWindowLong(TreeView1.Handle, GWL_STYLE) or $00000100); 

 

经过这样处理后的TreeView就带有了CheckBox的效果,可是大家可能会发现,CheckBox的下边框线不见了。这是由于默认的Node行距太小,可以对此进行修改。

(须要引用CommCtrl单元)

  1. TreeView_SetItemHeight(TreeView1.Handle, 20);  
posted @ 2012-07-12 00:18  马儿快跑  阅读(848)  评论(0编辑  收藏  举报