Office中国论坛/Access中国论坛

标题: 分享一个自写的界面分割调整控件,也求教个问题 [打印本页]

作者: 站到终点站    时间: 2015-3-26 15:04
标题: 分享一个自写的界面分割调整控件,也求教个问题
      今天跟大家分享一个在窗体上用于调整其他控件大小的SplitterBar的东西,这个东西有几个要求:1、第一个要求就是鼠标移到其上时,可以改变鼠标指针的显示;

2、拖动时,可以调整其他的控件的位置;
最终的效果如图:
[attach]56009[/attach]

       我看了下很多其他的实例,一些实例直接使用的标签,这样的实例可以做到拖动时调整其他控件位置,可是第1条就难做到,鼠标在其上时,指针无变化。有些实例不能及时捕捉到鼠标移出事件(用SetCapture和ReleaseCapture之类的API函数),鼠标快速移出时就不灵光了,尤其是在拖到过程中,造成拖一下,然后就不动了。最后没有办法只有寻求通过MouseLeave事件来做。
       窗体的MouseLeave事件,在Access跟VB6中的窗体都没有提供,必须自己使用API来添加,网上有个实例是VB6中的实现代码(老外写的)。我照着这个实例做了个搬到Access中,就是附件的样子了。不过又碰到个莫名奇妙的问题,在这里也问问大家有没有知道原因的,现象就是:
      当在Access中进入VBE环境后,再打开那个frmTest窗体的时候就没效果了,还有可能让你的Access完全死掉。但是如果不进入VBE的话,运行就没有任何问题。我自己调试查了下,发现如果进入VBE环境一次之后,那个自定义的窗体过程捕获的消息就不再能捕获到MouseLeave事件了。这个现象真的好生的奇怪!
      附件如下:
[attach]56010[/attach]

作者: tmtony    时间: 2015-3-26 15:06
好东东,谢谢分享,先坐个沙发!
作者: yanwei82123300    时间: 2015-3-26 15:41
站到终点站 谢谢分享
作者: t小宝    时间: 2015-3-26 15:41
常规子类化,再打开vbe就有问题。
不过想要鼠标移到控件上改变指针形状,不需要子类化的,用两个api:SetCursor和LoadCursorA,在控件的鼠标移动和按下事件中改变指针形状就可以了,鼠标移出时自己会还原
作者: roych    时间: 2015-3-26 15:47
本帖最后由 roych 于 2015-3-26 15:51 编辑

测试了下,如果进入VBE了,则必须退出,打开,压缩修复一次才可以恢复原来的效果。
不知道是不是跟VBA版本有关系。顺便说句,本实例对Access 2003失效。

作者: leonshi    时间: 2015-3-26 15:53
谢谢分享
作者: 站到终点站    时间: 2015-3-26 15:55
roych 发表于 2015-3-26 15:47
测试了下,如果进入VBE了,则必须退出,打开,压缩修复一次才可以恢复原来的效果。
不知道是不是跟VBA版 ...

可能是2003不支持主体的Paint事件造成的,将Set mSplitter = Me.Splitter0.Form放到Load事件里面应该就没问题
作者: 站到终点站    时间: 2015-3-26 16:27
本帖最后由 站到终点站 于 2015-3-26 16:30 编辑
t小宝 发表于 2015-3-26 15:41
常规子类化,再打开vbe就有问题。
不过想要鼠标移到控件上改变指针形状,不需要子类化的,用两个api:SetC ...

多谢小宝版主的提醒,我似乎明白了点什么。VB6里面直接子类化也会出现一些IDE的异常或者崩溃,所以看到很多VB6自定义控件似乎写了很多汇编代码来解决这个问题。当初一直没搞明白,出于什么目的,写这么多代码进行子类化处理。还以为只是单单为了解决自定义窗体过程代码不能放在窗体代码模块,只能放在标准模块中这个问题。我这里倒是有些VB6无崩溃SubClass的代码,研究下看看能不能解决这个问题。
作者: 站到终点站    时间: 2015-3-26 16:47
看了一篇博文http://blog.csdn.net/lyserver/article/details/5420762
搞的我突然有种冲动,使用完全自定义的窗体来做控件,Access中的窗体真是有点坑爹。{:soso_e101:}

作者: t小宝    时间: 2015-3-26 21:58
开始进坑了,呵呵。。。
自定义窗体不是不可以,但上面放不了access的内置控件,这样已经完全脱离access,不如直接用c语言了




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3