treeview的问题,在线等待!(100分)

  • 主题发起人 主题发起人 一少
  • 开始时间 开始时间

一少

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟因工作需要,要做一个带check功能的treeview (网上这类三方控件虽说很多,不过
总有些地方不能满足需求)

实现的思路是用两张图片的替换来表现check和uncheck状态,代码如下
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
node:ttreenode;
begin
node:=treeview1.GetNodeAt(x,y);
if node<>nil then begin
if node.stateindex=1 then
node.StateIndex:=2
else
node.StateIndex:=1;       // 1、2分别是check和uncheck状态的图标
end;
end;

上面的代码运行时有个问题,只要鼠标点到treeview上面就会触发下面的代码;
而我要的是----只有鼠标点到treeview上各个节点前的表示check,uncheck的图标上才触发,
我想通过截取节点图标的位置和鼠标位置比较判断,只是不知如何截取节点图标的位置,请问
怎么做?还有没有别的好办法?



 
1stClass控件组有该控件...
 
用 GetHitTestInfoAt 函数
 
我感觉Virtual TreeView应该算是功能强大且非常快速了,比Delphi自己的快很多,
功能也强大很多,你说的这个功能对她来说很容易。
http://www.delphi-gems.com/VirtualTreeview/VT.html
 
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
MyHitTest : THitTests;
begin
MyHitTest := TreeView1.GetHitTestInfoAt(X,Y);
试一下吧。
 
to catchan cemi

已搞定,谢谢二位!
成功的代码如下
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
HitTests: THitTests;
begin
HitTests := TreeView1.GetHitTestInfoAt(X, Y);
if htOnStateIcon in HitTests then
begin
if TreeView1.Selected.StateIndex = 2 then
TreeView1.Selected.StateIndex := 1
else
TreeView1.Selected.StateIndex := 2;
end;
end;

不过有句代码怎么都看不懂
htOnStateIcon in HitTests
哪位朋友能帮忙细说一下
 
摘自帮助
Used in the GetHitTestInfoAt method.

Unit

ComCtrls

type
THitTest = (htAbove, htBelow, htNowhere, htOnItem, htOnButton, htOnIcon, htOnIndent, htOnLabel, htOnRight, htOnStateIcon, htToLeft, htToRight);
THitTests = set of THitTest;

Description

THitTests is a set of THitTest values. THitTest can have any of the following values:

Value Means the point is

htAbove Above the client area.
htBelow Below the client area.
htNowhere Inside the control, but not on an item.
htOnItem On an item, its text, or its bitmap.
htOnButton On a button.
htOnIcon On an icon.
htOnIndent On the indented area of an item.
htOnLabel On a label.
htOnRight On the right side of an item.
htOnStateIcon On a state icon or bitmap associated with an item.//

htToLeft To the left of the client area.
htToRight To the right of the client area.
 
不明白,为什么不使用 TreeView的stateimages属性?多简单!
 
多人接受答案了。
 
后退
顶部