我最近在做一个网格控件,用了下面的几种方案,但都不理想,请指教。
方案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.   

    就算别人给你分,那也是专家分,而不是可用分!做网格控件最好还是用API来画,用Line方法太慢,有控件数组的方法也是不可取的,最基本的API: MoveTo & LineTo & DrawText可以看一下我做的网格控件,不过我花了很长时间来做的:
    http://junwhj.myrice.com
    http://www.grid2000.com
      

  2.   

    果然是高手,请你多指教。不知你花了多长时间做这个控件?
        我已经整整做了2个星期了。目前源代码已经2000多行,越来越觉得难做,各种功能之间要协调的方面太多了,总是觉得顾此失彼,真想放弃了。
        现在最大的问题是觉得不美观,主要是上下滚动单格时有跳动的感觉。我现在是用自做的子控件数组来完成可见的单元格界面,真正可见的单元格一般不会太多,所以速度也不慢。数据和格式放在结构体数组中,它不受可见单元格个数的限制,理论上可以容纳非常大量的数据。现在问题是翻滚数据时,要根据数据和数据的格式改变可见单元格的显示,这一步产生明显的闪动感觉(尤其是有合并单格的时候)。你有什么办法可以帮我降低闪动吗?你是采取怎样的方法来实现数据的滚动的?我暂时不想改用API,因为那样我前期所做的工作都要作废了。
      

  3.   

    不过现在有了惊喜的发现,在1GCPU,256MB的计算机上运行,闪动基本上消失了。我的计算机还是K62 450,64MB内存,有闪动也是可以承受的,现在这样的机基本上是垃圾了。
      

  4.   

    记得有一个editgrid的作者在上面,找找相互交流一下.你还可以把你的控件试用版帖出来让大家为你试用一下,提提建议.
      

  5.   

    为什么要这样折腾?我VB用的有4年了,期间也遇到过很多问题。网格我认为用VB来做是很困难的,而且将来实用价值不大。美观,功能,速度等等,无论如何都赶不上VB中最差的网格组件。
      

  6.   

    好,现在就放到网上。请大家到http://v4.livegate.net/971637/test.zip下载。附有例程,如果提示输入注册码,请输入133,要输入两次才能创建控件实例。
    希望大家能好好的帮我测试一下,等我有可用分之后,一定加分。提的建议越多,给分越多,找出的BUG越多,给分越多。
    先谢谢大家了。
    (特邀:junwhj(junwhj.myrice.com) 、 planetike(阿胜)、 truethree(CBD)三位高手进行测试。这个控件本来想做来自己用的,不想越做越大,越做越头痛)
      

  7.   

    我看过一个好VB做的,非常好,它就是用Print方法来显示数据,没有闪动,只用到了不到20个基本控件。
      

  8.   

    我有列表组建
    我自己写了个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建议大家先下安装盘,因为比较新,支持皮肤改变,自己定义哦
      

  9.   

    对不起,以前安装盘有点问题,上传了一个新的
    安装盘下:ftp://[email protected]/SmartMail_Setup.rar