小弟最近在自学D..虽然听说已经走下坡路了...但是很多人却有D情结.我想D肯定有它的魅力所在..
所以就自学一下.因为一直是用按键精灵来写一些游戏的绿色挂来着.所以我想就先用D去实现按键的
部分功能吧...今天解决了全局热键的问题..现在在延时的问题上遇到麻烦了..请看我写的代码:
procedure Delay(Num:Integer);
var
  FirstTickCount,Now:LongInt;
begin
  FirstTickCount:=GetTickCount();
  repeat
  now:=GetTickCount();
  until (Now-FirstTickCount)>Num;
end;{$R *.dfm}procedure TForm1.btn1Click(Sender: TObject);
var
  i:Byte;
begin
  for i:=1 to 10 do
  begin
  edt1.Text:='';
  edt1.text:=IntToStr(i);
  Delay(200);
  end;
  ShowMessage('10秒已过');
end;这个效果应该是文本框里面的值按1.2.3.4.5.6.7.8.9.10顺序显示出来才对..
可是它却是直接在2秒后弹出10秒已过.然后文本框直接显示10.跟sleep的效果
是一样的.有什么办法可以解决这个问题呢..希望各位大大不吝赐教

解决方案 »

  1.   

    Now是delphi的函数。change your variable name to something different.
      

  2.   


    是你代码写错了,edit1.txt第一次循环都被清空了,所以只显示了最后一次循环的值10,修改后的代码如下:procedure TForm1.btn1Click(Sender: TObject);
    var
      i:Byte;
    begin
      edt1.Text:='';
      for i:=1 to 10 do
      begin 
      edt1.text:=edt1.text + ' ' + IntToStr(i);
      Delay(200);
      end;
      ShowMessage('10秒已过');
    end;
      

  3.   

    edt1.text:=edt1.text + ' ' + IntToStr(i);
    后面加上:
    Application.ProcessMessage;
    就可以看到你要的效果。
    因为VCL组件基本上都是通过Windows消息来处理刷新的,你这段代码阻塞了主线程处理Windows消息的处理。