DELPHI隐藏有一个设置控件属性的函数(把这个函数拷贝到你的程序中)
procedure SetComCtlStyle(Ctl: TWinControl; Value: Integer; UseStyle: Boolean);
var
  Style: Integer;
begin
  if Ctl.HandleAllocated then
  begin
    Style := GetWindowLong(Ctl.Handle, GWL_STYLE);
    if not UseStyle then Style := Style and not Value
    else Style := Style or Value;
    SetWindowLong(Ctl.Handle, GWL_STYLE, Style);
  end;
end;
新版的WIN公共控件的TREEVIEW中有DELPHI中没有的风格定义
const
  TVS_CHECKBOXES = $0100;
用下面的语句既可给TTREEVIEW加CHECKBOX
SetComCtlStyle(TTreeView1,TVS_CHECKBOXES,True); 

解决方案 »

  1.   

    可以使用1stClass中的treeview控件
      

  2.   

    多谢sean2000(地宽天高)
    问一句,哪里可以找到这些详细资料?
      

  3.   

    setwindowlong
    太神了,
    学习
      

  4.   

    sean2000(地宽天高) 
    请问该涵数是用在什么地方能让TREEVIER加CHECKBOX
      

  5.   

    happyjoe(尘土飞扬): 你说的“1stClass”这个东东,我没有找到啊!能否发一个给我!
      

  6.   

    已经Mail给你一个CheckTreeView控件!
      

  7.   

    sean2000(地宽天高) 谢谢了,按照你的办法已经ok了!
      

  8.   

    To:windofsun(太阳风) :
    你可以看看这个单元
    C:\Program Files\Borland\Delphi6\Source\Rtl\Win\CommCtrl.pas 
    CommCtrl是Win95/98的DLL,包含了Windows的Common Controls,
    比如ListView,TreeView等
      

  9.   

    sean2000(地宽天高) ,你觉的这样加上去,有实际用处吗?
    那怎么样判断有没有打勾,而且可以保存这个界面
      

  10.   

    To:suny_2001(小鱼儿) :
       怎么没有实际用处?以下代码可以判断有没有打勾:
    Uses CommCtrl;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;
      

  11.   

    那保存我打勾的可以吗?能做到 1stClass中的treeview 构件的功能吗
      

  12.   

    To:suny_2001(小鱼儿) :
       1stClass我没有用过,我不明白你所谓的保存是什么意思,我既然能够打勾,当然可以设置是否打勾了。以下代码就可以实现:
    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;
      

  13.   

    就是说是否能够保存成文件或到数据库里。
    然后重新打开,就是程序打勾的也自动会出来。
    还有我觉的这个CHECKBOX的前面的框是不是很大?不过你的方法是不错的了