大虾们请进:一个小问题(VCL控件的动态创建)----在线等待

toperscj 2003-10-17 12:27:31
我需要在程序中动态创建一些Button,数量较大,我现在用While循环做的。速度不是令人满意。(切换界面明显感到慢)能否用线程动态创建?如何创建。俺是个新手,请大家给点儿方法
...全文
37 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
liusiyan 2003-10-25
  • 打赏
  • 举报
回复
555555
  • 打赏
  • 举报
回复
除了做扫雷这样傻的游戏,估计日常事务也不会有这么多button!
如果是日常事务,还不如不用button,否则岂不是在用鼠标点键盘一样!!!
radandgreensky 2003-10-23
  • 打赏
  • 举报
回复
只是要功能的话没必要建那么多按钮吧
建议用动态挂接处理函数的方法
这样,你一共就只需要建最初界面上看得到的几个按钮就够了

要换功能的话直接把按钮的名字一改,再把OnClick属性一改,就OK了
feng93017 2003-10-23
  • 打赏
  • 举报
回复
楼主该不是做扫雷吧?
toperscj 2003-10-17
  • 打赏
  • 举报
回复
观点:占用内存是肯定的,但是256的内村,感觉也非常明显,我的办法肯定是存在问题,请大伙儿给点儿建议。该如何处理?
huojiehai 2003-10-17
  • 打赏
  • 举报
回复
建得太多肯定会慢的,占内存
用线程动态创建也一样
aiirii 2003-10-17
  • 打赏
  • 举报
回复
如果多到會讓界面切換慢的程度,我建議你是要修改顯示的算法, 有些不顯示的, 就不要創建了, 這種思路可能性更好!!! 用線程只會生成的更慢!!!
gold_future 2003-10-17
  • 打赏
  • 举报
回复
利用多线程并不能提高创建速度,只能用于在创建时维护用房界面不让看起来向死机一样。
为了加一进度条可以用:
for i:=1 to 300 do
bein
创建按钮;
if i mod 10 =0 then
刷新进度条;
end;
不要每创建一个按钮应刷新一次进度条;刷新一次进度条的占用cpu量要远远大于执行一次条件判断语句的cpu占用量
gold_future 2003-10-17
  • 打赏
  • 举报
回复
aButton:=TButton.Create(nil);
try
//do something;
finally
aButton.Free;
end;
在创建时Create参数应为(nil),如果你在创建时指定一个宿主(如:Create(Self)),会影响创建速度,因为当内部会有个通知机制.
Alanwn 2003-10-17
  • 打赏
  • 举报
回复
删除多余的按钮,动态变化他的功能好了
toperscj 2003-10-17
  • 打赏
  • 举报
回复
能不能够把按纽的创建放在多个线程里?如果可以,应该怎么做?大虾们救命啊
toperscj 2003-10-17
  • 打赏
  • 举报
回复
有用,我的程序需要根据用户需要动态来满足用户的下一步操作。应该有100~300个。
剑神,能够详细给说明一下吗?我需要把Button放到Form上,然后根据执行button的事件。
ZyxIp 2003-10-17
  • 打赏
  • 举报
回复
为什么要创建那么多的按钮,有用吗?
pankun 2003-10-17
  • 打赏
  • 举报
回复
放在另一个线程中创建吧.创建完后一起显示出来.
如下

procedure CreateButton;
begin
//创建按钮
end;

procedure TForm1.Button1Click(Sender: TObject);
var
ThreadID, ThreadHwnd:THandle;
begin
ThreadHwnd := CreateThread(nil, 0, @CreateButton, nil, 1, ThreadID)
end;
hthunter 2003-10-17
  • 打赏
  • 举报
回复
除了占用内存,还占用CPU时间啊,如果太慢,窗口里面的东西创建完之前不要显示出来,加个类似于进度条的窗口,显示:“正在载入窗口,请稍候……”,呵呵,那样用户就可以忍受了

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧