我最近在做一个网格控件,用了下面的几种方案,但都不理想,请指教。
方案1:用label等控件数组作为网格单元格
(A)将label控件数组放在frame控件中,只在可见范围内加载label控件数组,通过改变label的标签来实现数据的上下滚动。这种做法的优点是点用资源少,可以处理大量的数据,但控件上下滚动数据时将产生明显的闪动,有合并单元格时更是如此,所以不理想。
(B)将label控件数组放在frame控件中,初始时只在可见范围内加载label控件数组,如果添加行,则添加一行label控件数组,数据的上下滚动通过改变frame控件的top属性来实现,这种方案滚动数据时相对平滑,但添加数据时要加载控件,速度变慢,控件数组的index属性的极限限制了控件所能处理的数据量。当数据量加大时,占用的资源也加大。
(C)将label控件数组放在frame控件中,初始化时按index属性的最大极限加载label控件数组。数据的上下滚动通过改变frame控件的top属性来实现,这种方案滚动数据时最平滑,工作时不用加载控件,速较快,但初始化时用时很长,占用资源太多。控件数组的index属性的极限同样限制了控件所能处理的数据量。方案2:用line方法来生成单元格,用print方法来显示数据。
(A)在控件的可见范围内用line方法生成网格,用print方法来显示数据,滚动时用cls清除数据后重新生成新的网格和显示新的数据,这种法占用资源最低,速度最快,但单元格定位相对困难,编写事件和方法难度加大,且数据上下翻滚时也有很明的闪动。
(B)先写一个子控件,用line方法生成边框, 用cls和print方法来更新数据,用这个子控件用数组生成一定数量的网格,并把这些单元格放在frame控件中,当数据时多于控件数组时,加载新的控件数组,数据的上下滚动通过改变frame控件的top属性来实现,这种方案滚动数据时较平滑,占用的资源要比用label控件少,但比方案1中的(A)要多。这是目前我所想到的最好的方法。大家有何高见,请发表!真不知execl的网格是用什么方法写出来的?
方案1:用label等控件数组作为网格单元格
(A)将label控件数组放在frame控件中,只在可见范围内加载label控件数组,通过改变label的标签来实现数据的上下滚动。这种做法的优点是点用资源少,可以处理大量的数据,但控件上下滚动数据时将产生明显的闪动,有合并单元格时更是如此,所以不理想。
(B)将label控件数组放在frame控件中,初始时只在可见范围内加载label控件数组,如果添加行,则添加一行label控件数组,数据的上下滚动通过改变frame控件的top属性来实现,这种方案滚动数据时相对平滑,但添加数据时要加载控件,速度变慢,控件数组的index属性的极限限制了控件所能处理的数据量。当数据量加大时,占用的资源也加大。
(C)将label控件数组放在frame控件中,初始化时按index属性的最大极限加载label控件数组。数据的上下滚动通过改变frame控件的top属性来实现,这种方案滚动数据时最平滑,工作时不用加载控件,速较快,但初始化时用时很长,占用资源太多。控件数组的index属性的极限同样限制了控件所能处理的数据量。方案2:用line方法来生成单元格,用print方法来显示数据。
(A)在控件的可见范围内用line方法生成网格,用print方法来显示数据,滚动时用cls清除数据后重新生成新的网格和显示新的数据,这种法占用资源最低,速度最快,但单元格定位相对困难,编写事件和方法难度加大,且数据上下翻滚时也有很明的闪动。
(B)先写一个子控件,用line方法生成边框, 用cls和print方法来更新数据,用这个子控件用数组生成一定数量的网格,并把这些单元格放在frame控件中,当数据时多于控件数组时,加载新的控件数组,数据的上下滚动通过改变frame控件的top属性来实现,这种方案滚动数据时较平滑,占用的资源要比用label控件少,但比方案1中的(A)要多。这是目前我所想到的最好的方法。大家有何高见,请发表!真不知execl的网格是用什么方法写出来的?
http://junwhj.myrice.com
http://www.grid2000.com
我已经整整做了2个星期了。目前源代码已经2000多行,越来越觉得难做,各种功能之间要协调的方面太多了,总是觉得顾此失彼,真想放弃了。
现在最大的问题是觉得不美观,主要是上下滚动单格时有跳动的感觉。我现在是用自做的子控件数组来完成可见的单元格界面,真正可见的单元格一般不会太多,所以速度也不慢。数据和格式放在结构体数组中,它不受可见单元格个数的限制,理论上可以容纳非常大量的数据。现在问题是翻滚数据时,要根据数据和数据的格式改变可见单元格的显示,这一步产生明显的闪动感觉(尤其是有合并单格的时候)。你有什么办法可以帮我降低闪动吗?你是采取怎样的方法来实现数据的滚动的?我暂时不想改用API,因为那样我前期所做的工作都要作废了。
希望大家能好好的帮我测试一下,等我有可用分之后,一定加分。提的建议越多,给分越多,找出的BUG越多,给分越多。
先谢谢大家了。
(特邀:junwhj(junwhj.myrice.com) 、 planetike(阿胜)、 truethree(CBD)三位高手进行测试。这个控件本来想做来自己用的,不想越做越大,越做越头痛)
我自己写了个sock类,因为WINSOCK不支持引用(做成安装盘有问题,并且不支持多线程)超OUTLOOK软件,提供源代码
楼主: 本软件是我在业余时间完成,我的目标是将它做成国内一流的客户端邮件软件.现在初具模型.正在修改中.它有一下特点:
1. 基于SDK模式开发
2. 大量源代码:软件中用到的所有组件,包括每一个按钮,均是自己所写.形成了自己风格的完整的一套组件库.他们包括:列表,文件管理,菜单等
所有代码均参照标准协议写成3. 由以下功能模块组成:邮件;新闻组;FTP;任务及其在之基础上的相应管理.如文件管理等.
4. 合作方式:转让经营权;根据你们需要提供技术支持;作为贵公司产品发布等,我们可以详细谈.我的联系方式是:[email protected] 13062323245一下为该软件部分运行界面图:
安装盘下:ftp://[email protected]/SmartMai_Setup.EXE代码下:ftp://[email protected]/SmartMail_Code.rarftp密码:uploads建议大家先下安装盘,因为比较新,支持皮肤改变,自己定义哦
安装盘下:ftp://[email protected]/SmartMail_Setup.rar