我想调试多次Buttonclick事件,但Delphi调试的时候窗体又是卡的,只能点击一次Button,第二次点的时候是卡主的不能点击,怎么办啊?

解决方案 »

  1.   

    你里面有循环吧,在循环中加入Application.ProcessMessages
    或者把执行过程写到线程中
      

  2.   

    outputdebugstring看调试窗口输出的调试信息。
      

  3.   

    顺便问一下,为什么我设置了StringGrid的fixedrows属性为一,但是第一行还是没固定,怎么回事啊?请教!!!
      

  4.   

    PostMessagevar
      I: Integer;
    begin
      for I := 0 to 3 do
        PostMessage(Button1.Handle, BM_Click, 0, 0);
    end;
      

  5.   

    还是不行啊,算了我把代码贴出来,大家看看啊。我想的是每次点击Button它都能处理不同的文件,可在stringGrid里看到的每次都是第一次的内容。不能根据选择的文件不同而改变。怎么回事啊?
    procedure TForm1.OpenbuttonClick(Sender: TObject); //打开按钮
    Var
    i,a: Integer;
    Thread1, Thread2: TMyThread;
    begin
    if OpenDialog1.Execute then
        begin
          if test then          //如果tst=true表示已经打开过
          begin
          DataArray:=nil;
          TimeBox.Items.Clear;
          TemperBox.Items.Clear;
          PressBox.Items.Clear;
          StrList.Clear;
          StrList.LoadFromFile(OpenDialog1.FileName);
          GetCol_Row; // 得到列数和行数
          BeginNum := BeginRead; // 从第几行开始读
          Setlength(DataArray, StrList.Count-beginNum-2, ColNum);
          a:=beginNum + 3 + Trunc((StrList.Count - beginNum - 2) / 2);//strLIst分成两部分
          Thread1 := TMyThread.Create(0,beginNum+2,a); // 解析前半部分
          Thread2 := TMyThread.Create(a-beginNum-1,a+1,StrList.Count-1); // 解析后半部分
          Thread1.OnTerminate := Threaddone;
          Thread2.OnTerminate := Threaddone;
    for i:=1 to ColNum do
    begin
      TimeBox.Items.Add(Format('第%d列',[i]));
      TemPerBox.Items.Add(Format('第%d列',[i]));
      PressBox.Items.Add(Format('第%d列',[i]));
    end;
          end
          else    //没有打开过
          begin
          StrList.LoadFromFile(OpenDialog1.FileName);
          GetCol_Row; // 得到列数和行数
          BeginNum := BeginRead; // 从第几行开始读
          Setlength(DataArray, StrList.Count-beginNum-2, ColNum);
          a:=beginNum + 3 + Trunc((StrList.Count - beginNum - 2) / 2);//strLIst分成两部分
          Thread1 := TMyThread.Create(0,beginNum+2,a); // 解析前半部分
          Thread2 := TMyThread.Create(a-beginNum-1,a+1,StrList.Count-1); // 解析后半部分
          Thread1.OnTerminate := Threaddone;
          Thread2.OnTerminate := Threaddone;
    for i:=1 to ColNum do
    begin
      TimeBox.Items.Add(Format('第%d列',[i]));
      TemPerBox.Items.Add(Format('第%d列',[i]));
      PressBox.Items.Add(Format('第%d列',[i]));
    end;
    test:=True;
          end;
        end;
    end;end.
      

  6.   

    [code=Delphi(Pascal)][/procedure TForm1.OpenbuttonClick(Sender: TObject); //打开按钮
    Var
    i,a: Integer;
    Thread1, Thread2: TMyThread;
    begin
    if OpenDialog1.Execute then
      begin
      if test then //如果tst=true表示已经打开过
      begin
      DataArray:=nil;
      TimeBox.Items.Clear;
      TemperBox.Items.Clear;
      PressBox.Items.Clear;
      StrList.Clear;
      StrList.LoadFromFile(OpenDialog1.FileName);
      GetCol_Row; // 得到列数和行数
      BeginNum := BeginRead; // 从第几行开始读
      Setlength(DataArray, StrList.Count-beginNum-2, ColNum);
      a:=beginNum + 3 + Trunc((StrList.Count - beginNum - 2) / 2);//strLIst分成两部分
      Thread1 := TMyThread.Create(0,beginNum+2,a); // 解析前半部分
      Thread2 := TMyThread.Create(a-beginNum-1,a+1,StrList.Count-1); // 解析后半部分
      Thread1.OnTerminate := Threaddone;
      Thread2.OnTerminate := Threaddone;
    for i:=1 to ColNum do
    begin
      TimeBox.Items.Add(Format('第%d列',[i]));
      TemPerBox.Items.Add(Format('第%d列',[i]));
      PressBox.Items.Add(Format('第%d列',[i]));
    end;
      end
      else //没有打开过
      begin
      StrList.LoadFromFile(OpenDialog1.FileName);
      GetCol_Row; // 得到列数和行数
      BeginNum := BeginRead; // 从第几行开始读
      Setlength(DataArray, StrList.Count-beginNum-2, ColNum);
      a:=beginNum + 3 + Trunc((StrList.Count - beginNum - 2) / 2);//strLIst分成两部分
      Thread1 := TMyThread.Create(0,beginNum+2,a); // 解析前半部分
      Thread2 := TMyThread.Create(a-beginNum-1,a+1,StrList.Count-1); // 解析后半部分
      Thread1.OnTerminate := Threaddone;
      Thread2.OnTerminate := Threaddone;
    for i:=1 to ColNum do
    begin
      TimeBox.Items.Add(Format('第%d列',[i]));
      TemPerBox.Items.Add(Format('第%d列',[i]));
      PressBox.Items.Add(Format('第%d列',[i]));
    end;
    test:=True;
      end;
      end;
    end;end.]
      

  7.   

    procedure TForm1.OpenbuttonClick(Sender: TObject); //打开按钮
    Var
    i,a: Integer;
    Thread1, Thread2: TMyThread;
    begin
    if OpenDialog1.Execute then
      begin
      if test then //如果tst=true表示已经打开过
      begin
      DataArray:=nil;
      TimeBox.Items.Clear;
      TemperBox.Items.Clear;
      PressBox.Items.Clear;
      StrList.Clear;
      StrList.LoadFromFile(OpenDialog1.FileName);
      GetCol_Row; // 得到列数和行数
      BeginNum := BeginRead; // 从第几行开始读
      Setlength(DataArray, StrList.Count-beginNum-2, ColNum);
      a:=beginNum + 3 + Trunc((StrList.Count - beginNum - 2) / 2);//strLIst分成两部分
      Thread1 := TMyThread.Create(0,beginNum+2,a); // 解析前半部分
      Thread2 := TMyThread.Create(a-beginNum-1,a+1,StrList.Count-1); // 解析后半部分
      Thread1.OnTerminate := Threaddone;
      Thread2.OnTerminate := Threaddone;
    for i:=1 to ColNum do
    begin
      TimeBox.Items.Add(Format('第%d列',[i]));
      TemPerBox.Items.Add(Format('第%d列',[i]));
      PressBox.Items.Add(Format('第%d列',[i]));
    end;
      end
      else //没有打开过
      begin
      StrList.LoadFromFile(OpenDialog1.FileName);
      GetCol_Row; // 得到列数和行数
      BeginNum := BeginRead; // 从第几行开始读
      Setlength(DataArray, StrList.Count-beginNum-2, ColNum);
      a:=beginNum + 3 + Trunc((StrList.Count - beginNum - 2) / 2);//strLIst分成两部分
      Thread1 := TMyThread.Create(0,beginNum+2,a); // 解析前半部分
      Thread2 := TMyThread.Create(a-beginNum-1,a+1,StrList.Count-1); // 解析后半部分
      Thread1.OnTerminate := Threaddone;
      Thread2.OnTerminate := Threaddone;
    for i:=1 to ColNum do
    begin
      TimeBox.Items.Add(Format('第%d列',[i]));
      TemPerBox.Items.Add(Format('第%d列',[i]));
      PressBox.Items.Add(Format('第%d列',[i]));
    end;
    test:=True;
      end;
      end;
    end;end.
      

  8.   


       test:=True;
       Thread1.free;         //加这两句,button应该就不会卡住了。
       Thread2.free;  没试,错了莫怪。
      

  9.   

    调试多次点击BUTTON,当你设置断点后,右键点断点的那个红色图标,然后选择上面第2个菜单BreakPoint Properties,然后进入断点的属性设置,你可以在Pass Count 后面输入2,也就是说,当断点被执行过2次后,执行第3次时DELPHI才会进入调试状态。