原来的办法是自己定制一个组件的方式,一个组件代表一个房间,组件和数据库相关联,但是每次打开form时,动态创建如此多组件会造成速度非常慢,有人说可以在内存中绘图,然后贴上去的办法,不知道如何去做呢?

解决方案 »

  1.   

    我觉得内存中绘图应该是可以的,内存中绘图主要是消除窗体重绘时的闪烁问题,如下:
    1:新建一个TempCanvas:TCanvas对象,
    2:在TForm1.OnPaint事件中,完成绘制操作:
      begin
       TempCanvas.draw(...);//都绘制到TempCanvas上去
       ...
       BitBlt(Form1.canvas.Handle,0,0,Width,Height,TempCanvas.Handle,0,0,
        SRCCOPY);//完成TempCanvas到Form1.canvas的拷贝
      end;
      

  2.   

    你可以定义数组保存状态,然后采用最基本的form.canvas画出来就ok了!
      

  3.   

    创建太多控件的确会影响效率,我也曾深受其害啊,你可以考虑在算法上优化一下,也许速度就能接受了                                              www.coderpub.com
      

  4.   

    可以呀,不用动态创建,见好了把图画load下来就行了么
      

  5.   

    用ListView如何,
    ViewStyle设为vsIcon,就像资源管理器设成“大图标”样式那样
      

  6.   

    不要在form上创建过多的控件(从tcontrol派生的),可以从tcomponent派生,代表每个房间,然后在form的canvas上画出来,这样的速度是可以接受的。很多报表采用的就是这种技术,比如FastReport,ReportMachine,你可以参考。
      

  7.   

    有谁知道动态创建控件好的算法。我现在写的一个程序就是这样的,速度明显慢!再加上每个窗体都要加载一个图片,点一个按钮切换都下一个窗体,有时有1秒多的延迟,不知道那位兄弟有好的办法没有!
    email : [email protected]
      

  8.   

    我现在还没有将数据库部分加上去,速度慢的原因是因为创建控件时会有时间延迟,就是在显示时出现一个一个控件按顺序显示,就象进度条似的!
    感谢guanxy(guanxy) 的 指导,我正在用你的方式去试一下!
    大家平时有什么好办法可以解决这个问题都可以谈谈啊!
      

  9.   

    我可以证明动态创建多个控件组会慢,我做的一个房间frame里面包含5个左右的控件,如果一下子创建30来个房间会慢的,我现在采用的是分页的形式显示出来,但是分页显示的就不能一下子看酒店的所有房态了,感觉很不爽。如果要一下子看完整个酒店的所有房间,那样有一个整体的感觉,做的好,会很舒服的,如果再加上一个放大缩小的功能!那就实在太好了!
      

  10.   

    放一个表,一个主键一个状态信息用ListView,ViewStyle设为vsIcon然后双击后show一个窗体,在通过database control控件设置或查看信息。其实酒店分不同层使用treeview,显示每一层使用listview,这样我感觉速度不会太慢吧,以前我一个界面上二三十个控件,也没有1秒后显示出来的,基本点show就出来了。只是我没有动态创建控件。
      

  11.   

    为何不用VisualNet 呢?它无需编程,只要你和数据库绑定就可以了当房态数据发生变化时,它会自动在图形界面上显示出来。我们用它开发了很多比你的要求更复杂的监控系统,它的数据变化还要大、快,它都能完成。到www.ntwt.com 上可以下载。