注册 登录
编程论坛 VFP论坛

TreeView设置背景色后,CheckBox边缘还有白色,如何处理

reakal 发布于 2021-12-05 22:20, 3511 次点击
只有本站会员才能查看附件,请 登录

如上图,表单运行后,再设置背景色,似乎复选框背景色还是白色,有办法解决吗

如何给 CheckBox复选框发送更改背景色消息?

可以确认,CheckBox复选框背景色来自 ImageList.backcolor(因为在INIT时是有效的),但运行后,更改 ImageList.backcolor后,图标能生效,但CheckBox复选框未能生效,所以如果能给 CheckBox复选框发小消息刷新背景色,或设置背景色,应该可以做到,但相关的API我不会。

谢谢!

[此贴子已经被作者于2021-12-6 00:12编辑过]

13 回复
#2
cssnet2021-12-06 22:24
印象中,以前在CSDN看过都市夜猫改造Treeview的文章:
https://blog.

不过我没那地方的“下载币”。谁若能下载CSDN的附件,不妨上传一个到这里,让大伙儿也学习一下:
http://download.
http://download.

#3
reakal2021-12-06 22:41
哎,6.0这个BUG,有解吗
貌似这个白块, 其它语言也存在,这个帖子是不是可以解决,哪位会VB的翻译成VFP,可以吗:https://

 
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2021-12-6 23:02编辑过]

#4
cssnet2021-12-07 08:02
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录

看了一下你引用的VB帖子,Treeview改背景色,无非就是调用WinApi:
SendMessage(TreeView1.hWnd, TVM_SETBKCOLOR, 0, sColor)    &&注:TVM_SETBKCOLOR = 4381,sColor = 想要的背景色

然后,用循环将每一个节点Node的BackColor,全部设置为sColor(想要的背景色):
SetWindowLong(TreeView1.hWnd, GWL_STYLE, lngStyle)
For Each iNode In TreeView1.Nodes
    iNode.BackColor = sColor
Next

这段VB代码,跟VFP几乎完全对应,“翻译”起来不难。不过,问题是:
假设Treeview有成千上万个节点,且已展开了一大部分,这样子遍历节点循环一遍,效率恐怕会狠低,可以想象的结果是,一改Treeview背景色,鼠标指针漏斗转不停,你的程序几乎完全停止响应。

现在,又回到了2楼的建议:
都市夜猫改造的Treeview 5.0,看上去很华丽。我们知道,Treeview 5.0自身没有CheckBox复选框,看他的说明,他自己画了一个,调用WinApi“粘”上去了。
楼主,为什么要自己瞎琢磨,而不站在大侠的肩膀上学习一下子?

当然,若能将原帖附件上传过来,让我们也沾光跟着学习一下子精妙的WinApi调用,那敢情也是极好的。哈哈哈哈。
#5
reakal2021-12-07 10:24
回复 4楼 cssnet
你说的有道理!
通过研究发现,方向可能确实偏了。
如果要改变背景色和使用ChcekBox复选框,恐怕只有 都市夜猫的 5.0改造版 可以了,要么就不改变背景色的形式使用6.0版本

CSDN下载不了,会员太贵了。

正应为TreeView的这些问题,这些年我都是用的CTtree,但CTtree会因为RunTime问题 一些年后就不能用了,所以我又再次捡起了MS TreeView

另外,那个VB帖子下方有回复,说用背景图,感觉好像能解决似的。
#6
sdta2021-12-07 12:27
API函数可以实现(源码找不到了)
#7
shenlancwz2021-12-12 15:06
回复 3楼 reakal
我也遇到此问题,最后一个节点展开变白,如您解决了的话麻烦给讲一下解决方法。
#8
cssnet2022-03-10 23:05
以下是引用sdta在2021-12-7 12:27:09的发言:
API函数可以实现(源码找不到了)


前些天无意中看到一个VB网站的代码(可惜网址没记下来),这才知道:
都市夜猫并非原创,只不过是将人家鬼佬1998年(年份我倒是印象特别深刻,呵呵)的VB代码,“翻译”成VFP,且未标明出处而已。
很感慨:人家二十多年前就早已解决的问题,可怜我们胡子一大把了,还在讨论且无解。
呵呵。VB6轻轻松松就能吊打VFP9……唉,咱可真够落后的!
#9
laowan0012022-03-11 08:21
tree.setall('backcolor',...)
不知这样是否好使
#10
sych2022-03-11 08:47
回复 6楼 sdta
抓紧时间把你的宝贝都分享出来吧,免得以后再找不到了
#11
foxfans2022-03-12 22:54
那个白块屏蔽是有技巧的。设置颜色也无需用api(用api也可以)
1. 可以设置仅 0 或 1(对应于textonly 和 picture and text),treelines的会有白块,得另外处理(用勾子可以屏蔽不过不建议)
2. 要设置不同的颜色直接引用某个节的颜色如:
for xx=1 TO thisform.olecontrol1.Nodes.Count
    thisform.Olecontrol1.nodes(xx).foreColor = RGB(222, 110, 66)  &&.BackColor ....都可以从这里面来设置任何一个节点的相关属性
    ...
    ...
endfor
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2022-3-12 23:04编辑过]

#12
sych2022-03-13 20:11
这个才是真正的解决方法
#13
easyppt2022-03-13 23:48
RE: foxfans
3楼 6.0版本的 白块如何处理? 需要 treelines 啊,不然不美观,而且效果也不好。

[此贴子已经被作者于2022-3-13 23:54编辑过]

#14
sostemp2022-07-20 09:54
学习
1