小弟最近在自学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的效果
是一样的.有什么办法可以解决这个问题呢..希望各位大大不吝赐教
所以就自学一下.因为一直是用按键精灵来写一些游戏的绿色挂来着.所以我想就先用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的效果
是一样的.有什么办法可以解决这个问题呢..希望各位大大不吝赐教
是你代码写错了,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;
后面加上:
Application.ProcessMessage;
就可以看到你要的效果。
因为VCL组件基本上都是通过Windows消息来处理刷新的,你这段代码阻塞了主线程处理Windows消息的处理。