ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] UI设计自制日历窗体(无需注册MSCOMCTL.OCX)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2023-10-3 23:34 | 显示全部楼层 |阅读模式
本帖最后由 prome3 于 2023-10-5 20:15 编辑

大家好,


这次跟大家分享一个自制的日历窗口。这个窗口应用了Windows原生自带的日历控件,但无需注册MSCOMCTL.OCX。
下面截图是运行效果:
日历窗口运行效果.png
在此声明:任何人都可以应用此示例于自己的项目中,无需获得我的口头或书面许可。示例中的完全免费,无需任何费用。

在使用过程中如有问题,欢迎大家留言讨论。(此示例开发和测试环境:Windows 10 64位,Excel 2019 64位)


补充内容 (2023-12-24 18:07):
[2023年12月24日 18点07分] 这两天趁着周末有空,再次对此款日历做了一些细节上的更新,请见第31楼!

补充内容 (2023-12-25 21:49):
之前在发布2023-10-05版本的时候心里总感觉还有哪里不对。
果然!在今天,有网友指出了一个条件编译的问题,现已做更新,请见第35楼和37楼。

补充内容 (2024-4-9 21:44):
朋友们,别再下载1楼的附件了。1楼附件代码有一些已知bug,如果非要运行的话请务必先保存好自己的数据。
***当前最新版请看1楼下方置顶***

日历窗口示例.zip

52.1 KB, 下载次数: 128

原版(有bug,别用)

日历窗口示例_2023-10-05更新.zip

55.23 KB, 下载次数: 212

更新版请看后面的楼层

评分

9

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-18 22:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 prome3 于 2024-4-19 20:39 编辑

又做了一点更新,代码量要爆炸了……为此移除所有注释内容,如果需要中文注释的话可以单独提出来。

这次更新在技术上有点意思的地方:动态加载 manifest 文件,直接切换 Excel 程序的上下文,以此保证加载的是 6.0 以上版本的系统控件。

低版本 Excel 比如 2003、2007 和 2010 会同时加载 5.8 和 6.0 版本的 comctl32.dll 链接库,如果 VBA 要创建窗口的话,默认调用的是 5.8 版本的,窗口的外观就是那种 VBA 用户窗体控件模样。然而此款日历要实现的是调用 6.0 版本的、现代外观的控件。
5.8控件样式.PNG 6.0控件样式.PNG


原先我还以为需要自己去遍历 Excel 的进程模块,找到 6.0 版本的 comctl32.dll,再调用其中的接口来生成控件。为此调试、测试了整整两天时间,一筹莫展。期间同时在学习 Jaafar 的代码(请见附件MultipleHyperlinkMsgBox.zip),突然觉得其中一段代码有点眼熟,发现正是自己需要的。(他写的代码模块化做得相当出色,很多代码模块和片段、函数、过程都能直接拿来上手就用)

感兴趣的朋友可以对比一下 1.2.6 比 1.2.2 多出来的几个 API 函数就知道了。




补充:78楼缺失的链接(日历控件内置的快捷键):
https://learn.microsoft.com/zh-cn/windows/win32/controls/month-calendar-controls


日历控件-1.2.6.zip

6.76 KB, 下载次数: 6

MultipleHyperlinkMsgBox.zip

56.47 KB, 下载次数: 7

TA的精华主题

TA的得分主题

发表于 2023-10-4 08:28 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-10-4 08:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感谢分享

TA的精华主题

TA的得分主题

发表于 2023-10-4 10:16 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-10-4 13:59 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
感谢分享

TA的精华主题

TA的得分主题

发表于 2023-10-4 14:09 | 显示全部楼层
本帖最后由 cidanji 于 2023-10-13 16:01 编辑

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-10-4 18:13 | 显示全部楼层
f8b1987 发表于 2023-10-4 08:28
代码量有点大吧

感谢评论!
这个例子的总代码行数不过300余行,其实也算是个微型的项目了。
原先的版本总代码行数大约是现在这个的两倍,主要是一些我自己加入的自定义功能,比如显示日历窗口后可以用鼠标移动它的位置,可以按键盘的Esc键或回车键隐藏它。后来准备分享到这个论坛的时候,觉得那些功能太花里胡哨了,就给删掉了。
平时我学习的一些国外高手写的代码,总代码行数动辄上千行,完整分析下来着实费好大一番功夫(但他们写的代码构造合理,逻辑清晰,阅读起来真的是一种享受)。相比之下我这个例子的代码量真的太少了。
若说代码总逻辑量,这个示例其实也就几个WIN API的调用,没啥复杂的、绕来绕去的逻辑。
最后,再次感谢您的关注!

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-10-4 18:14 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-10-4 18:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-10-4 18:25 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-30 23:08 , Processed in 0.052664 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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