ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[Excel 程序开发] [第48期] 类模块应用之 彩色列表框

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-6-28 22:35 | 显示全部楼层

彩色列表框

我的答案;

本帖子中包含更多资源

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

x

TA的精华主题

TA的得分主题

发表于 2009-6-28 22:45 | 显示全部楼层

......

本帖子中包含更多资源

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

x

TA的精华主题

TA的得分主题

发表于 2009-6-28 22:49 | 显示全部楼层
谢谢班主给了两分了啦,为了对的起这两分,把这两天改的发上来一起学习了!

这次发现了frame控件,加listbox控件就是多余的了,所以就单用了一个frame控件封装成一个假的listbox了.这次封装的是差不多了,唯有不完美的地方还是那个滚动条,因不能很好控制图片移动像素,导致经常移动滚动条后出现点选错误.

用了比较多的API和变量,写的代码也比较乱,可能看起来比较累.简单说一下思路:
1\用了双内存DC,memDC用于绘画场景,usermemoryDC用于生成图片对象的备用场景,创建好这两个DC后,首先在MemDC里绘画了,用textout函数画,(绘的画就是一个按数据前后排列的位图),将绘画好的位图用BitBlt函数复制到usermemoryDC中,现就可以通过usermemoryDC设备场景,用OleCreatePictureIndirect函数生成一个图片对象了,有了图片对象就可以赋值给frame.picture了,也就是相当于frame.picture=loadpicture("加载图片路径")的效果了.一个关键点为什么是双内存,因为OleCreatePictureIndirect函数要引用DC内存场景中的位图地址,引用它了就会破坏它与原来内存DC场景的关系(简单说就是破坏了位图).这样就很容易理解只创建一个内存DC生成一个图片对象后,就不能继续在这个内存DC中绘画了.而两个内存DC一个负责绘画,一个负责生产图片对象用.就能连续绘画了!

2\数据是放在一个叫colorlistarr动态数组里,操作很简单就是一个动态数组读数据,写数据的方法.只是在类里不支持对外数组的情况下用了一个技巧,就是在这个私有数组类里分别写一个读写私有数组的方法,当然这个方法是带X,Y参数为数组下标的,并可以加上别人什么参数,协助读取数组了.

3\就是那个滚动条了,留给自己吧或大家一起解决下吧,解决了应该算是一个自制控件了!还有一个缺点就是位图不能太大,不然就会卡了,不过一般的电脑数据在一万一下应该问题不大.

本帖子中包含更多资源

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

x

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-6-28 22:52 | 显示全部楼层
HHAAMM 版,可以直接拖动类模块到另一个工程中.

TA的精华主题

TA的得分主题

发表于 2009-6-28 23:03 | 显示全部楼层
跟班主的题意有很大出入了,发上后面的例子也是希望能给大家对绘画函数的使用方法有一定的帮助了!在EH里学了这么多,也算是自己对EH网友们的一点点回报吧!

TA的精华主题

TA的得分主题

发表于 2009-6-29 00:49 | 显示全部楼层
原帖由 泓() 于 2009-6-26 22:11 发表
现在有了 Scarlett_88 版 竞赛题 都变成  数据透视表 天下了
敬佩Scarlett_88

不论 数据透视表 有多强 我从不考虑学习
说实在 第一眼 看到 数据透视表 就讨厌

哈哈,别担心,只因为参加竞赛接触SQL+数据透视表,我叫它强强联手。这样才跑数据透视表版区搅合搅合的,把其中有点意思的抽出来提交为竞赛题了。数据透视表花个10来天就能成熟手了。
后面我该花时间学SQL server 了,查询还是基本,过程和事务才是难点。在数据库中同在Excel中比,对SQL的要求就低多了,因为查询视图也可以像真的数据表一样使用,我也就没有什么好题材提供给竞赛区了。
EH有很多VBA高手,我还是小学生呢,这次的答题就最后几天做的,乖乖也,几乎连效果都出不了,熬了一宿,赶在截止日期前几小时出来个效果,都取巧了,
不过每次竞赛,我好像都是从0开始,在做的过程中学习,我同师傅说是一次次惊艳的过程,这次的竞赛题是我最刻骨铭心的一次,带给我一个亮丽的殿堂。对类模块有了一些感知,谢谢楼主。

[ 本帖最后由 Scarlett_88 于 2009-6-29 00:57 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-6-29 00:56 | 显示全部楼层
原帖由 清风_ll 于 2009-6-28 22:35 发表
我的答案;


老大,首先感谢你赐给俺的2分!

看了一下您的杰作,明白了许多。现将附件中发现的问题提交如下:

1、在DEMO演示中,列表框不能实时更新,特别是双击事件,容易出现空白行。
2、当改变高度时,当滚动条消失时对Item 的宽度处理有瑕疵,容易出现右边出现空白。

学习了

TA的精华主题

TA的得分主题

发表于 2009-6-29 01:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
相关说明:
7楼答案是21日当天提供的,已经超时,不该被评分。

6楼第二个附件
应该说实现了彻底封装,可移植,满足了题目的总要求
“使用控件名称Frame1及其它控件的固定名称,这点在动态添加时确实忽略了”,但不应该是实现功能的主要问题
“指定RowSource属性时,原列表项目未清除”,没看到原题目对此有具体要求,所以写的时候也未注意
几个未实现的属性,是因为错误的理解为只要实现窗体上各按钮的功能就可以了
未提供事件

TA的精华主题

TA的得分主题

发表于 2009-6-29 09:13 | 显示全部楼层
原帖由 清风_ll 于 2009-6-28 22:35 发表
我的答案;

看到清风班主的答案,第一感觉功能很强,界面设计的很漂亮的.
看了代码后发现原来可以通过在frame里生成一个个Label控件,来现实单条数据彩色效果,每个Label控件又是进行了类封装,现实每个Label都有自己移动(及感知),点选事件,真的很巧妙,这绝对是对VBA中类编程很好的例子.

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-6-29 09:22 | 显示全部楼层
原帖由 zldccmx 于 2009-6-29 00:56 发表


老大,首先感谢你赐给俺的2分!

看了一下您的杰作,明白了许多。现将附件中发现的问题提交如下:

1、在DEMO演示中,列表框不能实时更新,特别是双击事件,容易出现空白行。
2、当改变高度时,当滚动条消失 ...


这两个问题我也早发现,第一个主要是因为没有刷新,本来想添加一个重绘功能,因为懒没加,如果拉动滚动条触发控件自身的重绘功能,就会显示了。第二个功能也有的,就是调用CListBox里面的Repaint过程,原来是公用的,上传之前改为私有过程了,改后没注意。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-4 01:32 , Processed in 0.044868 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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