TreeView问题 ( 积分: 50 )

  • 主题发起人 主题发起人 simonlyr
  • 开始时间 开始时间
S

simonlyr

Unregistered / Unconfirmed
GUEST, unregistred user!
在TreeView控件中有没有选中事件也就是当前接点选中,而不是onclick。
具体的说:就是TreeView中选择CheckBox后触发的事件是什么?急!
 
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
HitInfo: THitTests;
node: TTreeNode;
Pos: TPoint;
begin
GetCursorPos(Pos);
Pos := self.TreeView1.ScreenToClient(Pos);
with Pos do
begin
HitInfo := self.TreeView1.GetHitTestInfoAt(X, Y);
node := self.TreeView1.GetNodeAt(X, Y);
end;
if (node <> nil) and (HtOnStateIcon in HitInfo) then
begin
//这里就是发挥的地方了!
end;
end;
 
kk2000:那么怎么得到TreeView当前是选中还是取消呢,并且得到当前是选择值?
 
请知道的快快回复,可以加分!
 
有两个事件
OnChange //某节点被选中后触发
OnChanging //某节点被选中前触发
 
这个东西其实很简单得了! 主要是你是使用什么做CheckBox, 是图片还是写API 的!
图片的话这样吧! node.StateIndex := 1 就看你的选中图片索引是 1 那么就是选中
node.StateIndex := 2 就看你的取消图片索引是 2 那么就是取消;
API 方式好象是这样判断的:
const
TVS_CHECK = $2000;

function TXTreeView.IsNodeCheck(Node: TTreeNode): Boolean;
var
TvItem: TTVItem;
begin
Result := False;
if Node = nil then Exit;
TvItem.hItem := Node.ItemId;
TvItem.mask := TVIF_STATE;
TreeView_GetItem(Node.TreeView.Handle, TvItem);
Result := (TvItem.state and TVS_CHECK) = TVS_CHECK;
end;
应该会做了吧!
 
kk2000:谢谢你了,我已经能实现了。顺便问一下,父节点选中,其子节点完全被选中;相反完全取消。同样的,子节点全部选中,其父节点选中;相反,子节点全部取消,其父节点取消。怎么实现?我这方面研究不多,谢谢回复。问完就加分!能者多劳嘛:)谢谢了!
 
simonlyr 觉得已经离题了! 呵呵^_^
不过要实现你的选中和取消的问题就是一个递归函数就OK 了啊! 不要说我又不会写递归啊! ^_^
 
帮我看看我的问题撒。。都是牛人,我的也是树的问题,郁闷啊。没有人回答啊
 
kk2000:还是得谢谢你!有时间常来小弟这里捧场:)
 
后退
顶部