CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

请问如何实现按一下回车,执行一段无限循环,再按一下停止循环,因为在执行无限循环的时候,好象不会响应再次按下的回车键。

楼主ytnice()2005-01-14 12:22:35 在 Delphi / VCL组件开发及应用 提问

谢谢! 问题点数:20、回复次数:9Top

1 楼linzhisong(無聊)回复于 2005-01-14 12:24:52 得分 10

循环中加入  
   
    Application.ProcessMessages;  
   
  就可以了Top

2 楼gxgyj(杰克逊)回复于 2005-01-14 12:25:08 得分 2

在循环中加入  
  application.ProcessMessages;Top

3 楼cangwu_lee(橙子)回复于 2005-01-14 14:16:18 得分 5

路过,说说想法  
   
  Form变量:  
  bRunning,   bStopNow:Boolean;  
   
  初始化    
  bRunning:=false;    
  bStopNow:=false;  
   
  第一次按下回车  
   
      if   not   bRunning   then   begin  
   
          bRunning:=true;  
          bStopNow:=false;  
   
          While   Not   bStopNow   do  
              application.ProcessMessages;  
   
      end   else   begin  
   
          bStopNow:=true;  
          bRunning:=false;    
   
      end;  
  Top

4 楼cangwu_lee(橙子)回复于 2005-01-14 14:29:04 得分 0

不全经过验证的  
   
  unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   StdCtrls;  
   
  type  
      TForm1   =   class(TForm)  
          Button1:   TButton;  
          Label1:   TLabel;  
          Label2:   TLabel;  
          procedure   Button1Click(Sender:   TObject);  
          procedure   FormCloseQuery(Sender:   TObject;   var   CanClose:   Boolean);  
          procedure   FormCreate(Sender:   TObject);  
      private  
          bRunning,   bStopNow:Boolean;  
          j:integer;  
      end;  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  {$R   *.dfm}  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
      if   not   bRunning   then   begin  
   
          bRunning:=true;  
          bStopNow:=false;  
          j:=0;  
   
          While   Not   bStopNow   do   begin  
   
              inc(j);  
              label1.caption:=DateTimeToStr(now);  
              label2.caption:=intToStr(j);   label2.Refresh;  
              application.ProcessMessages;  
              if   j>2147483647-1     then   j:=0;  
   
          end;  
   
      end   else   begin  
   
          bStopNow:=true;  
          bRunning:=false;  
   
      end;  
  end;  
   
  procedure   TForm1.FormCloseQuery(Sender:   TObject;   var   CanClose:   Boolean);  
  begin  
      bStopNow:=true;  
  end;  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
      bRunning:=false;    
      bStopNow:=false;  
  end;  
   
  end.  
  Top

5 楼coolnan(踏平九城)回复于 2005-01-14 15:29:24 得分 1

上面的都可以,方法都是在循环的中加入,判断变量来实现,这样就OK了!Top

6 楼shuyi(舒易)回复于 2005-01-14 15:54:02 得分 1

另外还推荐一下使用线程,按回车启动线程,再按一下线程停止。Top

7 楼ytnice()回复于 2005-01-14 16:15:36 得分 0

线程怎么做?Top

8 楼ytnice()回复于 2005-01-14 17:24:24 得分 0

 
  procedure   TForm1.FormKeyPress(Sender:   TObject;   var   Key:   Char);  
  begin  
      if   key=#13   then  
      begin  
          stopLoop   :=   not   stopLoop;  
          doLoop;  
          if   not   stopLoop   then  
              i:=0;  
      end;      
  end;  
   
  procedure   TForm1.doLoop;  
  begin  
   
      while   not   stopLoop   do  
      begin  
          application.ProcessMessages;  
          i   :=   i+1;  
          label1.Caption   :=   intToStr(i);  
      end;  
  end;Top

9 楼xiangwangz(<*敝屣荣华 浮云生死 此身何惧*>)回复于 2005-01-14 17:39:02 得分 1

var  
      Form1:   TForm1;  
      ThreadID:longword;  
  implementation  
   
  {$R   *.dfm}  
  function   MyThead(P:pointer):Longint;stdcall;  
  var   iQuit:integer;  
          iCount,iGetMsg:integer;  
          MSG:TMsg;  
  begin     //简单测试  
      iCount:=0;  
      repeat  
          if   PeekMessage(MSG,0,0,0,PM_NOREMOVE)then  
          begin  
              if   GetMessage(MSG,0,0,0)then  
              if   integer(MSG.wParam)=10   then   exit;  
          end;  
          form1.Edit1.Text:=inttostr(iCount);  
          inc(iCount);  
          iCount:=(iCount   mod   100);  
      until(false);  
      result:=0;  
  end;  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
      CreateThread(nil,0,@MyThead,nil,0,ThreadID);  
  end;  
   
  procedure   TForm1.Button2Click(Sender:   TObject);  
  begin  
      PostThreadMessage(ThreadID,0,10,0);  
  end;  
   
  end.Top

相关问题

  • 用好回车键
  • 怎样检测回车键
  • 怎么屏蔽回车键
  • 怎么表示回车键?
  • 如何响应回车键
  • 按回车键执行
  • TWebBrowser 不接受回车键
  • 无限循环
  • 无限循环
  • 无限循环中~

关键词

  • 循环
  • application
  • bstopnow
  • brunning
  • stoploop
  • tform
  • icount
  • processmessages
  • tobject
  • begin

得分解答快速导航

  • 帖主:ytnice
  • linzhisong
  • gxgyj
  • cangwu_lee
  • coolnan
  • shuyi
  • xiangwangz

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo