关于动态生成大量控件对速度的问题,和如何多选动态生成的控件。请高手赐教!(200分)

  • 主题发起人 主题发起人 CrazyCat
  • 开始时间 开始时间
C

CrazyCat

Unregistered / Unconfirmed
GUEST, unregistred user!
相信大家都懂得动态生成控件。但我有个问题,就是我想在一个PANEL上生成大约8000个SHAPE,当生成到1000个以后速度就下降的很快,有什么办法能快速生成呢?
我的意图是在一个JPE的图象上能够显示8000个SHAPE对象,当用户鼠标移动到对象上时显示对象的详细信息。并可以支持选则多个SHAPE对象,对他们的详细信息进行更改?
就象在IDE中设计时选择多个控件后更改属性一样!
当然了,不用SHAPE也可以,只要能完成我的意图,什么都行,请大家帮我一下!



 
晕...哪个用户会要求同时看8000个对象的详细信息?你没搞错吧...屏幕显示的下吗?或者你想让用户用放大镜去看?
 
不好意思,不一定要同时看到8000个对象的信息,但是要能同时查看、更改其中几个的信息资料
 
谁可以给个解题思路啊,天啊!急,在线等待!
 
如果你采用delphi的控件,就没有办法了.
你需要自己做!

-----------------
http://www.codeidea.com
TCAD
--------------------------------
 
有没有搞错,8000个? 不知道你究竟想干什么,建议你优化一下自己的算法,转换一下解决问题的思路
 
8000个算正常的啊.
我用4万个做test
 
我想你把8000個組成一個圖顯示,然後根據鼠標的位置來顯示該對象的信息,這樣無論多少個,速度不成問題!
 
干嘛要用那么多的SHAPE呢,根据鼠标的座标来判断图像点,再根据该点选定该点周围指定的区域进行操作不就行了。
如果是同时选多点,则可以用热键进行配合,按下某个热键则该点的区域被选中,再到下一个点进行选择。
 
不要用shape,自已在canvas上画,记录不同的shape的位置,然后在onmousemove中处理
 
是不是8000个SHAPE同时显示?
如果不是,可以即时加载嘛。
不过,如果你是同时显示,谁能看清捏?
 
8000对内存要求很高啊
建立一个record,将每个点(既你所说的每个Shape)的属性组成一个结构体
建立一个二位数组保存每个点的信息,其中二维分别表示行和列
用Image保存你的jpeg图片
剩下的工作就是针对Image的坐标做文章了
 
这就叫做:使用 Shape 所以才问这个问题,不使用 Shape 不但不需要问这个问题,万一
真的使用了也不需要问如何处理。:)
Microsoft 不会是把每个像素都做成 Shape 才知道鼠标在哪里的吧。
 
谢谢各位的好心帮助,我只是想能不能把这写信息当作一个可以显示的对象来处理,觉的使用SHAPE不生成HANDLE,所以才使用他的。使用坐标判断是一个好办法,但是要处理的东西太多了,我是想把一些东西交个系统来帮我完成,其实使用SHAPE对内存的要求也不是很多,可能是我一开始想的SHAPE没有生成HANDLE有问题,1000个SHAPE使用的内存数量不会大于20000BIT,但是就是速度降的很快!到4000个时就是很慢很慢了!
 
谢谢各位的好心帮助,我只是想能不能把这写信息当作一个可以显示的对象来处理,觉的使用SHAPE不生成HANDLE,所以才使用他的。使用坐标判断是一个好办法,但是要处理的东西太多了,我是想把一些东西交个系统来帮我完成,其实使用SHAPE对内存的要求也不是很多,可能是我一开始想的SHAPE没有生成HANDLE有问题,1000个SHAPE使用的内存数量不会大于20000BIT,但是就是速度降的很快!到4000个时就是很慢很慢了!
 
可以换个思路:
让用户去选择要显示的控件个数(如:从50-100,共50个),一次显示最多个数你可以根据屏幕的大小和显示的速度做控制,我看最多显示100个就得了,要我是用户的话超过20个我都懒的看了,这样就很快了吧,你甚至可以做个前翻,后翻按钮,反正就是按顺序和一次显示的控件个数来控制,应该不会很难的。
to fhb:
做test和实际运行不能混为一谈,test可以随便多地显示,真正给用户用时怎么可能一下子给用户看那么多的数据(或记录),这是不实用的,我们其实应该做到的是在尽可能短的时间内显示最适量的数据给用户,而不是显示尽可能多的数据,你说是不是?
 
我知道有个关键的问题在提高速度方面:
Shape1.Name,当已经有4000个,这句话将判断是否和已经存在的重名.
所以解决这个问题的办法就是Shape1.Name='';
>wind2000
而不是显示尽可能多的数据,你说是不是?
是的,但如果满足了这个,其他的更好办了.
--------------------
TCAD
http://www.codeidea.com
 
我试了一个在DELPHI7.0中,在PANEL上生成SHAPE,程序中加入Panel.DisableAlign;速度飞快,但8000个还是要一点时间生成,大家可以试一下,当然我也加入了Name:='';没加的就没试了!谢谢大家个的各种建议,希望大家能有更好的建设性的意见,再等五天结贴!大家有什么好的提议都可以提!
 
其实这么多的信息在1024*768下显示,每个SHAPE只能到2*2的尺寸,也实在太小了点,而且在关闭的时候速度很慢,这方面还要在改进一下,但是就自动生成的对象来说编程方便了很多,我也在考虑要不要把这种模式的程序改成直接划点,用鼠标的位置来判断,这样一次生成的控件就少了很多。
我有这种想法是因为看到一些3D的编辑软件中,每个图都由成千上万个可视对象组成,而且3D编辑软件的速度很快,支持鼠标拖动,鼠标多选,前两个问题我用我上面说的方法完成了,但鼠标多选还没什么头绪!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部