ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 10405|回复: 14

[Excel 程序开发] [第28期]七彩虹(Listview背景色)(结)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-10-2 20:31 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册


[此贴子已经被作者于2007-10-29 1:01:38编辑过]
单选投票, 共有 11 人参与投票

距结束还有: 3739 天3 小时34 分钟

您所在的用户组没有投票权限

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2007-10-5 03:46 | 显示全部楼层

占个沙发,答案已发送

第一次用Listview ,有点难,解决了,代码比较少。

效果实现,但是用SetSysColors函数不好,此函数是改变系统颜色,会影响到所有的程序,最好不用。

 


[此贴子已经被agstick于2007-10-23 20:26:27编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2007-10-14 00:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

答案已发送到 agstick@126.com,跟贴占位.

做了两个方案(没有用画图的方法). 

精彩,第二种方法是正解,willin2000兄也是API高手啊。

 


[此贴子已经被agstick于2007-10-23 20:30:57编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2007-10-19 17:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

wo lai chou ge su!hai yao duo jia ji ge zi cai hang ,na jiu zai da ji ge zi ma,bu yao xiao wo luo so wo,wo bu luo so ,hai fa bu cu ,luo so liao na mo yi da dui , ying gai bu hui xian wo hua bu duo le,fa fa fa

也是用SetSysColors函数,但是用完没有还原系统颜色,把我系统选定时的颜色改成黑的了,555~~,扣1分。

 


[此贴子已经被agstick于2007-10-23 20:33:39编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2007-10-23 20:50 | 显示全部楼层

最开始也想用 SendMessage 遗憾 API 水平低 查不到相关资料。

有了2000 的例子 这下有的学了[em02]

TA的精华主题

TA的得分主题

发表于 2007-10-23 21:24 | 显示全部楼层

请问 agstick  和 willin2000  两位老师

这些常数是如何取得的?需要其他的工具吗? 我的API 阅览器里查不到, 望不吝赐教,先谢谢了

Private Const LVM_FIRST = &H1000&
Private Const LVM_REDRAWITEMS = LVM_FIRST + 21
Private Const LVM_SETTEXTCOLOR = (LVM_FIRST + 36)
Private Const LVM_SETTEXTBKCOLOR = LVM_FIRST + 38

QUOTE:

在我的附件有一个工作表列出了所有的消息参数. 这些参数在网上搜索得到.-willin2000

[此贴子已经被willin2000于2007-10-24 16:58:36编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-10-29 00:58 | 显示全部楼层

总结

虽然本期参赛的朋友较少,但是却有3种不同的方法,这点还是值得欣慰的。本期的题主要是考察一下Sendmessage函数的用法,从此函数的名称就可以知道他的用途,就是发送消息。消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。windows的消息有1000多种,每个控件都会有一些对应的消息,Listview控件就有125种消息,列表框、文本框、组合框等都有自己的消息,通过Sendmessage发送这些消息可以实现一些控件本身没有的属性,但是遗憾的是,要发送消息必须要有句柄,而在VBA里大部分控件都没有句柄了。关于windows的消息机制,我在附件里提供一些资料,需要了解的朋友可以看看,也可以到网上找找。

从答案来看,第一种通过改变系统颜色来实现效果,即通过SetSyscolor函数改变系统选中项的颜色,此函数会影响到所有的程序,所以使用是会出现屏幕闪动,而且用完之后需要还原系统默认的设置,所以这种方法不值得推荐。

第二种方法(willin200方法一)是通过拦截窗口函数,此方法较为复杂。

第三种方法,通过发送LVM_SETTEXTBKCOLOR消息直接改变listview的底色,这种方法最简单(参考willin200方法二)

第四种方法,通过绘制矩形覆盖到选中的项上,也可以实现效果,此方法也比较简单,但是需要注意单位的转换,因为API函数的单位一般都是象素(pixel),而VBA的单位是磅(point),而且不能直接转换,仍需要API函数来转换。使得此方法也稍显罗嗦。

Sendmessage的方法这里就不提供了,参考willin200方法二,很简单,就是发送2条消息。这里提供方法四供参考。

 

[此贴子已经被作者于2007-11-4 21:47:42编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2007-10-29 03:43 | 显示全部楼层

第五种方法,在一个附加的表里动态的生成一个图像,然后设置listview 的picture 。

由于要从剪切板里取得图像 调用了N多的api ,使得此方法更加罗嗦。

附件 为早期 李东华(VBA 前版主 ldhyob ) 的作品 ,其目的是ListView控件失去焦点后,所选定的行仍然显示蓝色背景白色字体

稍作修改即可作为本题的答案。

但吸引我的地方是 剪切板中取得picture。发上来同好分享

最喜欢 winlin200方法二, 感谢agstick 的资料


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2011-12-17 02:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

由衷的说声谢谢,祝福楼主!

TA的精华主题

TA的得分主题

发表于 2012-6-15 19:22 | 显示全部楼层

RE:

willin2000 发表于 2007-10-14 00:34
答案已发送到 agstick@126.com,跟贴占位.做了两个方案(没有用画图的方法). 精彩,第二种方法是正解,w ...

内容收藏了哦
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 16:56 , Processed in 0.049446 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表