请问那有带check的treeview控件???(50分)

  • 主题发起人 主题发起人 gdzscj
  • 开始时间 开始时间
G

gdzscj

Unregistered / Unconfirmed
GUEST, unregistred user!
请问那有带check的treeview控件???
 
checklistbox
有这样的控件啊!
 
呵呵,dedema,人家要的是 TreeView

你可以直接用原有 TreeView,用一个 ImageList 保存两幅图:
0: 未选中的 Check;
1: 已选中的 Check.
然后根据情况设置节点的 ImageIndex 就可以了:)

 
可以直接使用TTree,用两幅图片
也可以使用VirtualTree控件
 
virtualtree是什么控件,在哪可找到?谢谢!
 
我写了一个
unit CheckTreeview;

interface

uses
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;

implementation

procedure Register;
begin
RegisterComponents('syz_component', [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.
 
用Shell Control Pack,没错的!
ftp://202.117.213.5/file/scp17.rar
 
接受答案了.
 
多谢以上各位的指教,我已达到目的了,但又出现了一个新的问题,就是当节点被选中时,imagelist会自动显示index为0的图,怎样才可以解决这个问题呢?
 
后退
顶部