我需要在程序中动态创建一些Button,数量较大,我现在用While循环做的。速度不是令人满意。(切换界面明显感到慢)能否用线程动态创建?如何创建。俺是个新手,请大家给点儿方法

解决方案 »

  1.   

    除了占用内存,还占用CPU时间啊,如果太慢,窗口里面的东西创建完之前不要显示出来,加个类似于进度条的窗口,显示:“正在载入窗口,请稍候……”,呵呵,那样用户就可以忍受了
      

  2.   

    放在另一个线程中创建吧.创建完后一起显示出来.
    如下procedure CreateButton;
    begin
      //创建按钮
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      ThreadID, ThreadHwnd:THandle;
    begin
      ThreadHwnd := CreateThread(nil, 0, @CreateButton, nil, 1, ThreadID)
    end;
      

  3.   

    有用,我的程序需要根据用户需要动态来满足用户的下一步操作。应该有100~300个。
    剑神,能够详细给说明一下吗?我需要把Button放到Form上,然后根据执行button的事件。
      

  4.   

    aButton:=TButton.Create(nil);
    try
      //do something;
    finally
      aButton.Free;
    end;
    在创建时Create参数应为(nil),如果你在创建时指定一个宿主(如:Create(Self)),会影响创建速度,因为当内部会有个通知机制.
      

  5.   

    利用多线程并不能提高创建速度,只能用于在创建时维护用房界面不让看起来向死机一样。
    为了加一进度条可以用:
    for i:=1 to 300 do
    bein
      创建按钮;
      if i mod 10 =0 then
        刷新进度条;
    end;
    不要每创建一个按钮应刷新一次进度条;刷新一次进度条的占用cpu量要远远大于执行一次条件判断语句的cpu占用量
      

  6.   

    只是要功能的话没必要建那么多按钮吧
    建议用动态挂接处理函数的方法
    这样,你一共就只需要建最初界面上看得到的几个按钮就够了要换功能的话直接把按钮的名字一改,再把OnClick属性一改,就OK了
      

  7.   

    除了做扫雷这样傻的游戏,估计日常事务也不会有这么多button!
    如果是日常事务,还不如不用button,否则岂不是在用鼠标点键盘一样!!!