speedbutton鼠标按下的问题

jhldelphi 2009-09-02 08:58:10
speedbutton鼠标按下时,开始执行一个循环,直到鼠标弹起来结束循环。
该怎么做呢?
...全文
166 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jhldelphi 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lljcs2007 的回复:]
楼主为何要这样做呢? 其实做这类的事情建议放到子线程里面去做应该好很多,因为在主线程里面还要处理用户交互及界面等事情,如果用子线程处理你现在问的问题:循环无法停止,speedbutton无法弹起来,也就不是问题啦。
[/Quote]
好的,谢谢
Lljcs2007 2009-09-02
  • 打赏
  • 举报
回复
楼主为何要这样做呢? 其实做这类的事情建议放到子线程里面去做应该好很多,因为在主线程里面还要处理用户交互及界面等事情,如果用子线程处理你现在问的问题:循环无法停止,speedbutton无法弹起来,也就不是问题啦。
jhldelphi 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 supertitan001 的回复:]
如9楼所说,要加一句Application.ProcessMessages放在循环内
[/Quote]

谢谢,可以了,
还有个问题是speedButton弹不起来了。。。。。
SuperTitan001 2009-09-02
  • 打赏
  • 举报
回复
如9楼所说,要加一句Application.ProcessMessages放在循环内
jhldelphi 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 supertitan001 的回复:]
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;
[/Quote]
不行,MouseUp是不是要MouseDown事件结束才会去执行呢?
老之 2009-09-02
  • 打赏
  • 举报
回复
循环内加句 Application.ProcessMessages;
SuperTitan001 2009-09-02
  • 打赏
  • 举报
回复
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;
jhldelphi 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bdmh 的回复:]
设置一个变量 CanDo
MouseDown中CanDo:=True;
MouseUp中CanDo:= False;

然后在那个循环中,判断Cando,如果CanDo=True则执行,如果CanDo=false,则Exit
[/Quote]
可是循环在那里触发呢?
我的代码:(下面代码有误,进入了死循环)
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;
yct0605 2009-09-02
  • 打赏
  • 举报
回复
参考ls各个的意见,在两个事件里面进行判断。
macchen1224 2009-09-02
  • 打赏
  • 举报
回复
你好,使用一個全局變量來判定是否已經是mouse up了,謝謝。
SuperTitan001 2009-09-02
  • 打赏
  • 举报
回复
设置一个全局变量,在MouseDown的循环里面判断该变量。
变量变化时exit或者break
bdmh 2009-09-02
  • 打赏
  • 举报
回复
设置一个变量 CanDo
MouseDown中CanDo:=True;
MouseUp中CanDo:= False;

然后在那个循环中,判断Cando,如果CanDo=True则执行,如果CanDo=false,则Exit
jhldelphi 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
MouseDown开始,MouseUp结束
[/Quote]
MouseUp怎么去结束,MouseDown里的循环呢?
MouseUp是不是要MouseDown事件结束才会去执行呢?
bdmh 2009-09-02
  • 打赏
  • 举报
回复
MouseDown开始,MouseUp结束

5,388

社区成员

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

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