var dw:dword;
const TVS_CHECKBOX=$0100;
begin
dw:=getwindowlong(treeview1.handle,GWL_STYLE);
dw:=dw or TVS_CHECKBOX;
setwindowlong(treeview1.handle,GWL_STYLE,dw);
已经在树中加了CHECK,但是不知道如何去得到一个TREENODE的CHECK值?并可以更改TREENODE的CHECK值????????????不想用其它控件。。
const TVS_CHECKBOX=$0100;
begin
dw:=getwindowlong(treeview1.handle,GWL_STYLE);
dw:=dw or TVS_CHECKBOX;
setwindowlong(treeview1.handle,GWL_STYLE,dw);
已经在树中加了CHECK,但是不知道如何去得到一个TREENODE的CHECK值?并可以更改TREENODE的CHECK值????????????不想用其它控件。。
uses CommCtrl;function TreeNodeGetChecked(mTreeNode: TTreeNode): Boolean;
var
vTVItem: TTVItem;
begin
Result := False;
if not Assigned(mTreeNode) or not Assigned(mTreeNode.TreeView) then Exit;
vTVItem.mask := TVIF_STATE;
vTVItem.hItem := mTreeNode.ItemId;
if TreeView_GetItem(mTreeNode.TreeView.Handle, vTVItem) then
Result := (vTVItem.State and IndexToStateImageMask(2)) > 0; //0: None 1: False 2: True
end; { TreeNodeGetChecked }function TreeNodeSetChecked(mTreeNode: TTreeNode; mChecked: Boolean): Boolean;
var
vTVItem: TTVItem;
Template:integer;
begin
Result := False;
if not Assigned(mTreeNode) or not Assigned(mTreeNode.TreeView) then Exit; vTVItem.mask := TVIF_STATE;
vTVItem.hItem := mTreeNode.ItemId;
TreeView_GetItem(mTreeNode.TreeView.Handle, vTVItem);
if not TreeView_GetItem(mTreeNode.TreeView.Handle, vTVItem) then Exit;
vTVItem.stateMask := TVIS_STATEIMAGEMASK;
vTVItem.state := IndexToStateImageMask(Succ(Ord(mChecked)));
Result := TreeView_SetItem(mTreeNode.TreeView.Handle, vTVItem);
end; { TreeNodeSetChecked }procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(TreeView1.Handle, GWL_STYLE,
GetWindowLong(TreeView1.Handle, GWL_STYLE) or TVS_CHECKBOXES);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
TreeNodeSetChecked(TreeView1.Selected, True);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
TreeNodeSetChecked(TreeView1.Selected, False);
end;procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if htOnStateIcon in TreeView1.GetHitTestInfoAt(X, Y) then
Caption := BoolToStr(TreeNodeGetChecked(TreeView1.GetNodeAt(X, Y)), True)
//TODO -oZswang -c事件 : 触发点击选择框
else Caption := '';
end;procedure TForm1.Button3Click(Sender: TObject);
var
I: Integer;
begin
Memo1.Clear;
for I := 0 to TreeView1.Items.Count - 1 do
if TreeNodeGetChecked(TreeView1.Items[I]) then
Memo1.Lines.Add(TreeView1.Items[I].Text);
end;