我们现在需要完成的功能是:在循环中,程序执行到某一处时,等待键盘响应,如果没有按下space的话,希望程序能够停止(保持当前状态),直到按下space键后程序结束本次循环并开始下次循环。    我们在mainform里设置了onkeypress事件,可以完成键盘响应,但是无法继续进行下次循环。
    请问:这个功能能否可用单线程实现??    我们又改用多线程,把循环函数放到新的线程单元中(onkeypress必须放到mainform中才会有响应),如果要用这种方法的话,应该怎么样实现啊??

解决方案 »

  1.   

    我们不要对话框
    简化一下程序就是
    procedure Tmainform.test;
    begin
      ...
      for i:=0 to 3 do
        begin
           ...
           mainform.Image1.Visible:=true;
         //在此处响应keydown让image1不可见,怎么实现?
        end;
      ...
    end;procedure TMainForm.KeyDown(Sender: TObject; var Key: Char);
    begin
       if(key=key_space) then
         begin
           ...
         end;
    end;
      

  2.   

    那就搞一个全局变量,在keyDown中给该变量设置,在for循环中加入while循环,不过while循环要sleep一小段时间,否则没法给全局变量赋值,cpu占用也很大。
      

  3.   

    定义一方法拦截拦截keypress事件,好像是这样
    procedure myKeypress(var Message: TWMChar);message WM_CHAR;
      

  4.   

    myKeypress这个procedure怎么用呢?
      

  5.   

    定义变量IsVisible=true;
    procedure Tmainform.test;
    begin
      ...
      for i:=0 to 3 do
        begin
           ...
           mainform.Image1.Visible:=true;       while IsVisible do
             application.processmessage;
         
        end;
      ...
    end;procedure TMainForm.KeyDown(Sender: TObject; var Key: Char);
    begin
       if(key=key_space) then
         begin
           IsVisible:= false;
         end;
    end;应该可以了
      

  6.   

    application.processmessage;
    这个语句是起什么作用的啊