Office中国论坛/Access中国论坛

标题: 【原创 / 软件】Access多条件格式扩展(Multi-FormatConditions Extension)发布贴 [打印本页]

作者: LucasLynn    时间: 2005-8-31 10:18
标题: 【原创 / 软件】Access多条件格式扩展(Multi-FormatConditions Extension)发布贴
程序名称:Multi-FormatConditions Extension
程序版本:V 1.0
程序作者:LucasLynn

程序介绍:
[attach]12816[/attach]


程序下载:(含多条件格式扩展、文档、示例)



















已知问题和BUG:

1、当绑定数据库小数类型字段到多条件格式控件时,将发生错误。此错误已证实为源代码中一个BUG,将在下一个版本中被修正。

2、当多条件格式控件为组合框并为其指定了获得焦点条件格式时,在控件无焦点状态下直接点击下拉按钮,将引起下拉框自动收回,需要重新点击才能拉开。此问题已被证实为因为条件格式更改导致的控件刷新,将在下一个版本中被修正。

3、当条件表达式中包含一个值为Null的字段时,将发生程序错误,此问题将在下一个版本中解决,目前较好的解决办法是取消窗体代码中的Option Explicit或者设定每个控件的默认值。

4、窗体载入后,符合条件的控件并不立即生效,而是需要获得一次焦点才能生效。此问题将在一下版本中修正。








< align=center>Multi-FormatConditions Extension V2.0 预告

  Multi-FormatConditions Extension V2.0正在紧张开发中,由于采用了全新的技术内核,因此将与V1.0有本质区别,全部代码重写。但并不意味着2.0是1.0的完全升级版本,因为所设计实现的目标不同,V2.0将不再支持V1.0的某些特性,因此可以将其视作两个不同的软件。两个版本将分别更新。

  Multi-FormatConditions Extension V2.0实现原理为附加条件格式控件全程监控Criteria,并接管其更改事件,当Criteria值发生更改时发送消息给多条件格式控件,通知其刷新,获得焦点事件由多条件格式控件自行定义。不再进行接管处理,其余条件格式使用FormatConditions(1)作为中转。Criteria求值放弃使用V1.0中的Dfirst(criteria,"USysCriteriaTranslator"),改回使用ControlSource=criteria。

  Multi-FormatConditions Extension V2.0设计目标为完全实现Access条件格式原有的功能,并通过使用更多内存资源,来实现更高的程序性能。

  Multi-FormatConditions Extension V2.0与V1.0的功能及性能对比如下:







 



< align=center>V1.0



< align=center>V2.0

<TR>

支持三个以上的条件格式



<;P align=center>



<;P align=center>

<TR>

支持附加条件格式多目标指派



<;P align=center>



<;P align=center>×

<TR>

条件所包含数据源更新时更新状态



<;P align=center>×



<;P align=center>

<TR>

附加条件格式支持的条件数



<;P align=center>3



<;P align=center>3

<TR>

性能



<;P align=center>低



<;P align=center>

<TR>

系统资源占用



<;P align=center>



<;P align=center>多





[此贴子已经被作者于2006-6-10 11:06:05编辑过]

作者: LucasLynn    时间: 2005-8-31 10:22
  经过四天苦战,终于可以发布第一个版本了。四天里面几乎每天都是到临晨才躺下,尽管如此,还是留下了几个待修正的BUG,当然被修正了的BUG更多。



  就目前功能而言,我想已经可以满足大多数用户的需要,希望大家试用后将BUG汇报给我,便于我尽快修正。
作者: ccczzz    时间: 2005-8-31 14:10
ok
作者: wuaza    时间: 2005-8-31 16:32
感谢LucasLynn分享大作,辛苦了!
作者: lingjiang    时间: 2005-8-31 16:38
太好了!!这可省事了!![em04][em04]
作者: 宿命的风    时间: 2005-8-31 16:49

作者: 静儿    时间: 2005-8-31 16:59
支持 LucasLynn
作者: yodong    时间: 2005-8-31 17:03
看看
作者: yehf    时间: 2005-8-31 17:31
万分感谢!
作者: tonywong    时间: 2005-8-31 17:39
ok
作者: 静儿    时间: 2005-8-31 17:49
照使用说明来操作,没有效果,为什么?哪里弄错了?条件格式的条件在哪里设置呢?即满足什么条件时用什么样的格式。弄不懂。
作者: esmile    时间: 2005-8-31 18:43
提示: 作者被禁止或删除 内容自动屏蔽
作者: ey1001    时间: 2005-8-31 19:20
up
作者: secowu    时间: 2005-8-31 19:22
以下是引用静儿在2005-8-31 8:59:00的发言:

支持 LucasLynn




作者: LucasLynn    时间: 2005-8-31 19:34
以下是引用静儿在2005-8-31 9:49:00的发言:



照使用说明来操作,没有效果,为什么?哪里弄错了?

条件格式的条件在哪里设置呢?即满足什么条件时用什么样的格式。

弄不懂。

别急,我已经考虑到了,有个完整的示范程序正在制作,MDB格式,包含两个例子窗体,晚上就可以发布了。
作者: boxster    时间: 2005-8-31 19:42
Take a look.
作者: tim2004    时间: 2005-8-31 19:48
dd
作者: CHENZHIRONG    时间: 2005-8-31 20:23
感谢。你说一下你的思路吗?
作者: LucasLynn    时间: 2005-8-31 20:35
以下是引用CHENZHIRONG在2005-8-31 12:23:00的发言:

感谢。你说一下你的思路吗?



主要的思路就是将一个控件上的多个条件格式分到多个隐藏的控件中,在控件获得和失去焦点的时候,遍历这些控件的条件格式,并进行比较,将符合条件的那条条件格式,复制到控件中。

程序的流程首先是通过初始化函数,识别窗体上所有的控件是否符合本扩展需要的,并且将其包装为截获了控件事件并且建立了条件格式索引表的mfcCtl类,当失去焦点或获得焦点的时候,这个类将截获到事件,并且遍历这个控件的条件格式索引表,进行一一比对(非常困难的过程,本程序至今也未能完美实现,只能实现90%左右),然后将符合条件的条件格式复制到当前控件。

具体的流程,以及程序中使用的关键技术,我过段时间会专门整理成文,作详细的介绍。
作者: LucasLynn    时间: 2005-8-31 20:46
其实在开发这个程序的过程中,对于我而言,最大的感触莫过于对于微软系统的理解。

之前一直很疑惑为什么微软要限制三个条件格式,现在我明白了,微软并不是偷懒,也不是故意不让用户用得舒服,而是条件格式这个东西,是个很占用资源的工具,我曾经完全模拟微软的实现方法,但是经常会导致内存溢出,尤其是在设计模式和运行模式之间多次切换之后。



比方说一个条件格式:表达式为:[Text1]+[Text2] = [Text3],看起来很简单,但是事实上Access需要对这一条条件格式,对三个控件进行全面的监视(数据绑定),其中任何一个发生变化(而不是应用此条件格式的控件发生变化),都将重新判断这个条件表达式。可以这么说,Access为每一个条件格式创建了1-2个常驻内存的数据绑定,而这对于资源的占用,效率的影响,程序的稳定性都是非常致命的。

在Multi-FormatCondition Extension中,我发现了微软的顾虑,而且也证实了这个顾虑的必要性,所以在1.0中,我并没有使用实时的Criteria求值,而是采用了异步方式,这样从功能角度而言,比Access的条件格式差了一点,但是基本够用,同时也避免了大量的系统资源占用。在没有完全解决这个问题之前,本程序将沿用此种方式,直到这个问题被解决,MFC才能完全实现Access条件格式的所有功能。

[此贴子已经被作者于2005-8-31 12:53:10编辑过]


作者: yodong    时间: 2005-8-31 21:38
最好是2002版本的
作者: 静儿    时间: 2005-8-31 21:42
在LucasLynn的帮助下,终于弄出来了。介绍点我的经验:就是要显示出来的那个文本框是不设置条件格式的。在要隐藏的那些文本框中设置条件格式,每个可设三个条件格式,不够的话,再增加文本框再继续增加条件格式,同时再这些文本框的标记上要标上显示出来那个文本框的名称。
作者: LucasLynn    时间: 2005-8-31 21:55
以下是引用静儿在2005-8-31 13:42:00的发言:



在LucasLynn的帮助下,终于弄出来了。

介绍点我的经验:

就是要显示出来的那个文本框是不设置条件格式的。

在要隐藏的那些文本框中设置条件格式,每个可设三个条件格式,不够的话,再增加文本框再继续增加条件格式,同时再这些文本框的标记上要标上显示出来那个文本框的名称。



还有一个特征你可能没用到,一组条件格式,可以指派给多个对象同时应用。

标记中指派的对象名,是可以为一组分号分隔的对象名的。
作者: sgrshh29    时间: 2005-8-31 22:37
大作太快,来不及看。
作者: kevindeng    时间: 2005-9-1 01:07
看看大作
作者: kevindeng    时间: 2005-9-1 01:09
老大,有没有2000版的啊
作者: LucasLynn    时间: 2005-9-1 02:33
以下是引用kevindeng在2005-8-31 17:09:00的发言:

老大,有没有2000版的啊



我的程序是支持完全支持2000的,但是因为使用MDE发布,所以暂时没法支持2000。除非你获得了源码。



关于源码获得请看帖子的最后一栏。
作者: LucasLynn    时间: 2005-9-1 03:15
更新了一下帖子,下载中添加了一个调用范例的mdb源代码,供使用者参考。

下一个版本今天已经开始动工,计划彻底更换核心技术,以达到完全实现Access条件格式功能的目标。

[此贴子已经被作者于2005-8-31 19:24:35编辑过]


作者: LucasLynn    时间: 2005-9-1 07:40
Multi-FormatConditions Extension V2.0 预告

  Multi-FormatConditions Extension V2.0正在紧张开发中,由于采用了全新的技术内核,因此将与V1.0有本质区别,全部代码重写。但并不意味着2.0是1.0的完全升级版本,因为所设计实现的目标不同,V2.0将不再支持V1.0的某些特性,因此可以将其视作两个不同的软件。

  Multi-FormatConditions Extension V2.0实现原理为附加条件格式控件全程监控Criteria,并接管其更改事件,当Criteria值发生更改时发送消息给多条件格式控件,通知其刷新,获得焦点事件由多条件格式控件自行定义。不再进行接管处理,其余条件格式使用FormatConditions(1)作为中转。Criteria求值放弃使用V1.0中的Dfirst(criteria,"USysCriteriaTranslator"),改回使用ControlSource=criteria。

  Multi-FormatConditions Extension V2.0设计目标为完全实现Access条件格式原有的功能,并通过使用更多内存资源,来实现更高的程序性能。



  Multi-FormatConditions Extension V2.0与V1.0的功能及性能对比如下:







 



V1.0



V2.0

<TR>

支持三个以上的条件格式









<TR>

支持附加条件格式多目标指派







×

<TR>

条件所包含数据源更新时更新状态



×





<TR>

附加条件格式支持的条件数



3



1

<TR>

性能









<TR>

系统资源占用









[此贴子已经被作者于2005-8-31 23:41:19编辑过]


作者: CHENZHIRONG    时间: 2005-9-1 08:06
以下是引用LucasLynn在2005-8-31 18:33:00的发言:





我的程序是支持完全支持2000的,但是因为使用MDE发布,所以暂时没法支持2000。除非你获得了源码。



关于源码获得请看帖子的最后一栏。



LucasLynn兄,没办法支持2000就没办法参加应用及测试,就没办法获得源码,就又没办法支持2000。

你是否再考虑一下,只是找个装有2000的机器再生成MDE就行了。
作者: LucasLynn    时间: 2005-9-1 11:03
以下是引用CHENZHIRONG在2005-9-1 0:06:00的发言:







LucasLynn兄,没办法支持2000就没办法参加应用及测试,就没办法获得源码,就又没办法支持2000。

你是否再考虑一下,只是找个装有2000的机器再生成MDE就行了。

好的。
作者: qdjqx    时间: 2005-9-1 15:16
谢谢分享!
作者: NeilChen    时间: 2005-9-2 02:16
OK
作者: elemodel    时间: 2005-9-2 03:37
感谢!!先看看
作者: tmtony    时间: 2005-9-2 10:47
good!
作者: LucasLynn    时间: 2005-9-2 17:46
以下是引用tmtony在2005-9-2 2:47:00的发言:

good!



有空帮我测试一下2.0吗?被几个技术难点困住了……[em03]
作者: 徐阿鹏    时间: 2005-9-2 17:54
支持,看看
作者: JYZYX    时间: 2005-9-2 17:56
支持!!
作者: LucasLynn    时间: 2005-9-4 03:59
以下是引用secowu在2005-8-31 11:22:00的发言:





不是你一直在发贴求助关于多条件格式的实现问题吗?试试这个,顺便帮我找找BUG……


作者: zerosailing    时间: 2005-11-20 07:50
Thank!!
作者: 82077802    时间: 2005-11-21 22:10
W45 R3 65
作者: kevinch    时间: 2005-11-22 00:28
OK
作者: kunlun    时间: 2005-11-23 18:53
000
作者: 120HYH    时间: 2005-11-25 02:33
万分感谢!
作者: cdwlove    时间: 2006-1-25 21:51
学习学习
作者: rende    时间: 2006-1-26 07:57
下载下来试试看
作者: feng8103    时间: 2006-1-26 10:10
这个软件从视觉上 让我觉的很不错。我要试一下。
作者: 5988143    时间: 2006-2-10 06:57
好东东当然要顶啦
作者: gzh97730    时间: 2006-2-10 18:39
感谢!
作者: gja918    时间: 2006-3-8 23:19
thank you!
作者: pabc    时间: 2006-3-9 18:38
好东西,学习
作者: avlding    时间: 2006-3-13 18:39
ding


作者: binzhouxc721521    时间: 2006-3-14 16:30
辛苦了!
作者: binzhouxc721521    时间: 2006-3-14 16:33
能不能转为2000格式。
作者: yangwenhong    时间: 2006-3-17 05:21
看看,学习一下
作者: wdmx    时间: 2006-3-19 07:46
让我看一下


作者: tafetsasn    时间: 2006-3-20 19:10
学习一下
作者: wxmins    时间: 2006-3-30 03:53
楼主真是一个好人啊.........
作者: zhouyefangzyf    时间: 2006-4-5 01:52
好东东,借用
作者: colindwk    时间: 2006-4-14 07:40
要好好学学
作者: abc1201    时间: 2006-4-22 22:58
真的不錯呀!努力學學![em07]
作者: jinpy    时间: 2006-4-25 01:49
谢谢!
作者: toby0988    时间: 2006-6-10 01:01
支持!!
作者: yoyo9433    时间: 2006-6-10 19:54
好东西啊
作者: yangxiang    时间: 2006-6-10 20:34
okokokok
作者: hawkyang    时间: 2006-6-14 22:25
万分感谢!
作者: xqquan    时间: 2006-6-15 23:04
好东西,一定要下.
作者: fxcxg    时间: 2006-6-26 05:32
看看。
作者: 快乐王    时间: 2006-6-26 08:39
up
作者: giggs    时间: 2006-6-30 08:44
hao


作者: 莫易    时间: 2006-6-30 09:48
什么东东,看看
作者: 莫易    时间: 2006-6-30 09:51
属实看不懂,,,,,,,,
作者: rbk1982    时间: 2006-7-17 04:22
多谢了,我做的一个系统好象就需要这样的程序
作者: friendship    时间: 2006-7-20 14:26
万分感谢分享!学习!
作者: ceanry    时间: 2006-7-21 00:53
我也是菜鸟,要发文
作者: 阿智    时间: 2006-7-26 03:26
T
作者: woyun    时间: 2006-8-16 23:47
我靠
作者: yest8    时间: 2006-8-19 02:11
好!学习!
作者: njguojiyong    时间: 2006-8-23 21:37
好东西
作者: 轻风    时间: 2006-8-24 00:32
好!下来用用先。没有MDB也没关系,代码估计我也看不懂[em04]
作者: 9399100    时间: 2006-9-11 19:36
ok
作者: SDQDSJW2000    时间: 2006-9-23 05:30
支持楼主,学习一下!
作者: wendy0107    时间: 2006-10-2 07:43

作者: aryam    时间: 2006-10-7 00:16
真正的高手是不能将自己的技术向新人开放...
作者: pengbodns    时间: 2006-10-25 08:14
[em17][em17][em17][em17]
作者: caoshuxue    时间: 2006-10-26 06:39
kankan
作者: mxboy    时间: 2006-10-28 06:29
学习一下
作者: fortran    时间: 2006-11-17 17:25
真要看一看
作者: pengdong    时间: 2006-11-26 01:12
我可以测试啦。
作者: utngrihii    时间: 2007-1-11 20:58
CC


作者: 阿飞飞    时间: 2007-1-14 03:52
好东东
作者: accessNew001    时间: 2007-1-15 17:49
[em02][em02][em02][em02]
作者: lmwar15    时间: 2007-1-16 00:57
very good[em07]
作者: lmwar15    时间: 2007-1-16 00:57
[em07]
作者: lmwar15    时间: 2007-1-16 00:58
[em07]
作者: fanren    时间: 2007-1-16 03:06
学习,OK.
作者: asfraser    时间: 2007-1-19 04:07
看看 应该对学习有帮助
作者: 木行之    时间: 2007-1-23 20:08
谢谢
作者: icuhe    时间: 2007-1-23 22:41
[em01]
作者: goldowl    时间: 2007-1-25 21:15
Thanks a lot.




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