当我点击菜单或按下相应的加速按钮的时候,菜单或按钮总是过半天才响应,不知这个问题怎么回事?
问题的关键在于:
每次我按下N4菜单或相应按钮,按下去后,菜单项和按钮一直都处于被按下状态,一直要等到那个双重循环结束之后菜单和按钮才弹起来,不知何故?有人说是串口问题,有人说是线程问题,究竟是何问题?这是我的代码:
procedure TForm1.N4Click(Sender: TObject); //N4为菜单
begin
if pagecontrol1.ActivePage=Tabsheet2 thenbegin
//tabsheet1.Enabled:=false;
N4.Enabled:=false; //该菜单被单击后就不可用,除非完成操作
toolButton5.Enabled:=false; //菜单对应的按钮
N5.enabled:=true; //N4菜单被单击后可用
toolButton6.Enabled:=true; //N5对应的按钮
comm1.StartComm; //打开串口
sleep(20);
qbuf[1]:=byte($01);
qbuf[2]:=byte($01);
comm1.writecommdata(@sbuf,2); //初始化串口
sleep(100);if checkbox7.Checked then
begin
for i:=0 to bloopIz do
begin
for j:=0 to bloopId do
begin
//循环送数据到串口
end;
end;
end;end;
end;

解决方案 »

  1.   

    这个控件本来就是这样,要等运行完CLICK内容了,才会弹回来呀,不然就会出现不停地按,上一次没运行完就又运行下一次了情况了
    测试,你可在SPEEDBUTTON 的ONCLICK中写入
    sleep(4000);
    你就会看到要过了4秒后,它才会弹起
      

  2.   

    procedure TForm1.N4Click(Sender: TObject); //N4为菜单
    begin
    application.processmessage;  //增加
    if pagecontrol1.ActivePage=Tabsheet2 thenbegin
      

  3.   

    但是,我在那个循环中要引用到主窗口的很多控件,用到很多变量。如果做一个线程的话,请问是否这些控件和变量都要作为参数传递给线程单元?(打算在线程单元线程的excute方法里面执行那个双重循环)
      

  4.   

    sleep(20);//这里要影响界面的速度的SPCOMM做的?
      

  5.   

    用这个吧  Delay(20);
    procedure Delay(AInterval: Integer);
    var
     I: Integer;
    begin
     for I := 0 to AInterval do Application.ProcessMesssage;
    end;