9 个解决方案
#1
树形控件没有相关的checkbox的事件。我的解决方法是在clicked事件中,通过鼠标点击的位置来判断是否点击的checkbox位置。下面是我使用的代码,你可能要调整下里面的数值
// 获取点击的X坐标
lx = UnitsToPixels(PointerX(), XUnitsToPixels!)
// 计算CheckBox所在的X坐标
If This.Linesatroot Then
lx1 = ltvi_Node.level * 19
Else
lx1 = (ltvi_Node.level - 1) * 19
End If
// 获取点击的X坐标
lx = UnitsToPixels(PointerX(), XUnitsToPixels!)
// 计算CheckBox所在的X坐标
If This.Linesatroot Then
lx1 = ltvi_Node.level * 19
Else
lx1 = (ltvi_Node.level - 1) * 19
End If
#2
这样做在不同的操作系统,不同的显示位置会准吗?
#3
没有checkbox事件,需要写在clicked事件里
你可以判断一下当前项目是否有下一级,如果有的话,就不要触发
或者你试一下这个函数GetItemAtPointer(),是不是点击图标和项目返回值不一样,如果不一样的话,可以考虑用这个函数来判断是否需要执行你的代码
#4
不行,返回的handle如同level的值,无法判断是点“+”还是“checkbox”还是“项目名称”
#5
换种方案,如果你用的pb10.5以上的话,可以用树型数据窗口
如果你用pb10.5以下的版本,你可以考虑用数据窗口来模拟
如果你用pb10.5以下的版本,你可以考虑用数据窗口来模拟
#6
树型图
#7
你在clicked加个判断是否是点击checkbox处了。
Function integer getiteminfo(long hWnd, long uMsg, long wParam, REF TVHITTESTINFO tv) library "user32.dll" Alias For "SendMessageA"
在mousemove事件中加入如下代码:
tvhittestinfo ltvitem
tvitem Item
ltvitem.pt.xx = UnitsToPixels (xpos, XUnitsToPixels! )
ltvitem.pt.yy = UnitsToPixels (ypos, YUnitsToPixels! )
getiteminfo(handle(this),4369,0,ltvitem)
IF ltvitem.hItem = 0 then return
ib_ischeckboxes = (ltvitem.flags = 64 )
在clicked事件中判断ib_ischeckboxes是否为真,如果是代表的是点击到checkbox否则就不是。。这样就不会出现你所说的问题了
Function integer getiteminfo(long hWnd, long uMsg, long wParam, REF TVHITTESTINFO tv) library "user32.dll" Alias For "SendMessageA"
在mousemove事件中加入如下代码:
tvhittestinfo ltvitem
tvitem Item
ltvitem.pt.xx = UnitsToPixels (xpos, XUnitsToPixels! )
ltvitem.pt.yy = UnitsToPixels (ypos, YUnitsToPixels! )
getiteminfo(handle(this),4369,0,ltvitem)
IF ltvitem.hItem = 0 then return
ib_ischeckboxes = (ltvitem.flags = 64 )
在clicked事件中判断ib_ischeckboxes是否为真,如果是代表的是点击到checkbox否则就不是。。这样就不会出现你所说的问题了
#8
接上面,还要加几个局部结构关系
type point from structure
long xx
long yy
end type
type tvhittestinfo from structure
point pt
long flags
long hitem
end type
type RECT from structure
long left
long top
long right
long bottom
end type
type tvitem from structure
long mask
ulong hitem
long state
long statemask
long psztext
long cchtextmax
long iimage
long iselectedimage
long cchildren
long lparam
end type
#9
这个方法不错,同上面的,也只有判断位置来解决了,谢谢各位
#1
树形控件没有相关的checkbox的事件。我的解决方法是在clicked事件中,通过鼠标点击的位置来判断是否点击的checkbox位置。下面是我使用的代码,你可能要调整下里面的数值
// 获取点击的X坐标
lx = UnitsToPixels(PointerX(), XUnitsToPixels!)
// 计算CheckBox所在的X坐标
If This.Linesatroot Then
lx1 = ltvi_Node.level * 19
Else
lx1 = (ltvi_Node.level - 1) * 19
End If
// 获取点击的X坐标
lx = UnitsToPixels(PointerX(), XUnitsToPixels!)
// 计算CheckBox所在的X坐标
If This.Linesatroot Then
lx1 = ltvi_Node.level * 19
Else
lx1 = (ltvi_Node.level - 1) * 19
End If
#2
这样做在不同的操作系统,不同的显示位置会准吗?
#3
没有checkbox事件,需要写在clicked事件里
你可以判断一下当前项目是否有下一级,如果有的话,就不要触发
或者你试一下这个函数GetItemAtPointer(),是不是点击图标和项目返回值不一样,如果不一样的话,可以考虑用这个函数来判断是否需要执行你的代码
#4
不行,返回的handle如同level的值,无法判断是点“+”还是“checkbox”还是“项目名称”
#5
换种方案,如果你用的pb10.5以上的话,可以用树型数据窗口
如果你用pb10.5以下的版本,你可以考虑用数据窗口来模拟
如果你用pb10.5以下的版本,你可以考虑用数据窗口来模拟
#6
树型图
#7
你在clicked加个判断是否是点击checkbox处了。
Function integer getiteminfo(long hWnd, long uMsg, long wParam, REF TVHITTESTINFO tv) library "user32.dll" Alias For "SendMessageA"
在mousemove事件中加入如下代码:
tvhittestinfo ltvitem
tvitem Item
ltvitem.pt.xx = UnitsToPixels (xpos, XUnitsToPixels! )
ltvitem.pt.yy = UnitsToPixels (ypos, YUnitsToPixels! )
getiteminfo(handle(this),4369,0,ltvitem)
IF ltvitem.hItem = 0 then return
ib_ischeckboxes = (ltvitem.flags = 64 )
在clicked事件中判断ib_ischeckboxes是否为真,如果是代表的是点击到checkbox否则就不是。。这样就不会出现你所说的问题了
Function integer getiteminfo(long hWnd, long uMsg, long wParam, REF TVHITTESTINFO tv) library "user32.dll" Alias For "SendMessageA"
在mousemove事件中加入如下代码:
tvhittestinfo ltvitem
tvitem Item
ltvitem.pt.xx = UnitsToPixels (xpos, XUnitsToPixels! )
ltvitem.pt.yy = UnitsToPixels (ypos, YUnitsToPixels! )
getiteminfo(handle(this),4369,0,ltvitem)
IF ltvitem.hItem = 0 then return
ib_ischeckboxes = (ltvitem.flags = 64 )
在clicked事件中判断ib_ischeckboxes是否为真,如果是代表的是点击到checkbox否则就不是。。这样就不会出现你所说的问题了
#8
接上面,还要加几个局部结构关系
type point from structure
long xx
long yy
end type
type tvhittestinfo from structure
point pt
long flags
long hitem
end type
type RECT from structure
long left
long top
long right
long bottom
end type
type tvitem from structure
long mask
ulong hitem
long state
long statemask
long psztext
long cchtextmax
long iimage
long iselectedimage
long cchildren
long lparam
end type
#9
这个方法不错,同上面的,也只有判断位置来解决了,谢谢各位