speedbutton鼠标按下时,开始执行一个循环,直到鼠标弹起来结束循环。
该怎么做呢?

解决方案 »

  1.   

    MouseUp怎么去结束,MouseDown里的循环呢?
    MouseUp是不是要MouseDown事件结束才会去执行呢?
      

  2.   

    设置一个变量 CanDo
    MouseDown中CanDo:=True;
    MouseUp中CanDo:= False;然后在那个循环中,判断Cando,如果CanDo=True则执行,如果CanDo=false,则Exit
      

  3.   

    设置一个全局变量,在MouseDown的循环里面判断该变量。
    变量变化时exit或者break
      

  4.   

    你好,使用一個全局變量來判定是否已經是mouse up了,謝謝。
      

  5.   

    可是循环在那里触发呢?
    我的代码:(下面代码有误,进入了死循环)
    var is_m: boolean;
    procedure TForm1.SpeedButton1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      is_m:= true;
      while is_m do
      begin
        //要求MouseDown时,edit的值不断的递增,MouseUp时就停止
        edit1.Text:= inttostr(strtoint(edit1.Text) + 1);
      end;
    end;procedure TForm1.SpeedButton1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      is_m:= false;
    end;
      

  6.   

    var is_m: boolean;
    procedure TForm1.SpeedButton1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      is_m:= true;
      while true do
      begin
        if is_m then
          //要求MouseDown时,edit的值不断的递增,MouseUp时就停止
          edit1.Text:= inttostr(strtoint(edit1.Text) + 1)
        else  exit;
      end;
    end;procedure TForm1.SpeedButton1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      is_m:= false;
    end;
      

  7.   

    循环内加句 Application.ProcessMessages;
      

  8.   

    不行,MouseUp是不是要MouseDown事件结束才会去执行呢?
      

  9.   

    如9楼所说,要加一句Application.ProcessMessages放在循环内
      

  10.   


    谢谢,可以了,
    还有个问题是speedButton弹不起来了。。
      

  11.   

    楼主为何要这样做呢? 其实做这类的事情建议放到子线程里面去做应该好很多,因为在主线程里面还要处理用户交互及界面等事情,如果用子线程处理你现在问的问题:循环无法停止,speedbutton无法弹起来,也就不是问题啦。