我想做一个秒表,精度是1/10秒。如何实现在每1/10秒的跳动。
菜鸟--我,使用sleep(100),但是没成功。
菜鸟--我,使用sleep(100),但是没成功。
解决方案 »
- 海康回调函数问题
- 问个小问题,如何通过 TRect 自动计算字体大小?
- 你是什么时候开始使用Delphi的,为什么不用很多人认为很有前途的Java,C#……
- 关于使用compute实行分类统计的问题
- 实现信使群发
- ●●●●哪有可打印的李维的《Delphl5.x ADO/MTS/CoM+高级程序设计篇》●●●●
- showmodal方式创建的窗体,能否使用Action:=caNone;?
- 如何在Delphi中实现注册表的读写啊???
- 急~~~~~关于Delphi的数据的插入
- 各位老大:如何实现把窗口打开时(SHOW),窗口显示而WINDOWS状态栏中隐藏窗口信息
- 一个关于在线程里面动态数组的问题
- 请问怎样把一个应用程序和一个文件夹中的程序都打包进去?
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, mmsystem;type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Button2: TButton;
Timer1: TTimer;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
acttime1,acttime2:cardinal;
smmcount,stimercount,spcount:single;
htimeid:integer;
iten:integer;
protimecallback:tfntimecallback; procedure timeproc(utimerid, umessage: uint; dwuser, dw1, dw2: dword) stdcall;
procedure proendcount;
implementation{$R *.DFM}//timesetevent的回调函数
procedure proendcount;begin
acttime2:=gettickcount-acttime1;
form1.button2.enabled :=false;
form1.button1.enabled :=true;
form1.timer1.enabled :=false;
smmcount:=60;
stimercount:=60;
spcount:=-1; timekillevent(htimeid);
end;procedure timeproc(utimerid, umessage: uint; dwuser, dw1, dw2: dword) stdcall;
begin
form1.edit2.text:=floattostr(smmcount);
smmcount:=smmcount-0.01;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
button1.caption :='开始倒计时';
button2.caption :='结束倒计时';
button2.enabled :=false;
button1.enabled :=true;
timer1.enabled :=false;
smmcount:=60;
stimercount:=60;
spcount:=60;
end;procedure TForm1.Button1Click(Sender: TObject);
var
lgtick1,lgtick2,lgper:tlargeinteger;
ftemp:single;
begin
button2.enabled :=true;
button1.enabled :=false;
timer1.enabled :=true;
timer1.interval :=10;
protimecallback:=timeproc;
htimeid:=timesetevent(10,0,protimecallback,1,1);
acttime1:=gettickcount; //获得系统的高性能频率计数器在一毫秒内的震动次数
queryperformancefrequency(lgper);
ftemp:=lgper/1000;
iten:=trunc(ftemp*10);
queryperformancecounter(lgtick1);
lgtick2:=lgtick1;
spcount:=60; while spcount>0 do
begin
queryperformancecounter(lgtick2); //如果时钟震动次数超过10毫秒的次数则刷新edit3的显示
if lgtick2 - lgtick1 > iten then
begin
lgtick1 := lgtick2;
spcount := spcount - 0.01;
edit3.text := floattostr(spcount);
application.processmessages;
end;
end;end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
edit1.text := floattostr(stimercount);
stimercount:=stimercount-0.01;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
proendcount; //显示从开始记数到记数实际经过的时间
showmessage('实际经过时间'+inttostr(acttime2)+'毫秒');
end;end.
SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs,
QStdCtrls, QTypes, QExtCtrls;type
TForm1 = class(TForm)
LCDNumber1: TLCDNumber;
Timer1: TTimer;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure LCDNumber1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
FRunning: Boolean;
procedure SetRunning(Value: Boolean);
public
{ Public declarations }
StartTime: Extended;
ElapsedTime: Extended;
Reset: Boolean;
property Running: Boolean read FRunning write SetRunning;
end;var
Form1: TForm1;implementation{$R *.xfm}procedure TForm1.SetRunning(Value: Boolean);
begin
if FRunning <> Value then
begin
FRunning := Value;
StartTime := ElapsedTime;
if Value then Reset := False;
end;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
if Reset then ElapsedTime := Now else ElapsedTime := Now - StartTime;
if Running then
LCDNumber1.Value := FormatDateTime('nn:ss.zzz', ElapsedTime);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
Running := True;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
Running := not Running;
end;procedure TForm1.Button3Click(Sender: TObject);
begin
if not Running then
begin
LCDNumber1.Value := '00:00.000';
Reset := True;
end;
end;procedure TForm1.LCDNumber1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
NewBorderStyle: Integer;
NewSegmentStyle: Integer;
begin
case Button of
mbLeft:
begin
NewBorderStyle := Ord(LCDNumber1.BorderStyle) + 1;
if NewBorderStyle > Ord(High(TBorderStyle)) then
NewBorderStyle := Ord(Low(TBorderStyle));
LCDNumber1.BorderStyle := TBorderStyle(NewBorderStyle);
end;
mbRight:
begin
NewSegmentStyle := Ord(LCDNumber1.SegmentStyle) + 1;
if NewSegmentStyle > Ord(High(TLCDSegmentStyle)) then
NewSegmentStyle := Ord(Low(TLCDSegmentStyle));
LCDNumber1.SegmentStyle := TLCDSegmentStyle(NewSegmentStyle);
end;
end;
end;end.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, mmsystem;type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Button2: TButton;
Timer1: TTimer;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
acttime1,acttime2:cardinal;
smmcount,stimercount,spcount:single;
htimeid:integer;
iten:integer;
protimecallback:tfntimecallback;
procedure timeproc(utimerid, umessage: uint; dwuser, dw1, dw2: dword) stdcall;
procedure proendcount;implementation
{$R *.DFM}procedure proendcount;//timesetevent的回调函数
begin
acttime2:=gettickcount-acttime1;
form1.button2.enabled :=false;
form1.button1.enabled :=true;
form1.timer1.enabled :=false;
smmcount:=60;
stimercount:=60;
spcount:=-1;
timekillevent(htimeid);
end;procedure timeproc(utimerid, umessage: uint; dwuser, dw1, dw2: dword) stdcall;
begin
form1.edit2.text:=floattostr(smmcount);
smmcount:=smmcount-0.01;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
button1.caption :='开始倒计时';
button2.caption :='结束倒计时';
button2.enabled :=false;
button1.enabled :=true;
timer1.enabled :=false;
smmcount:=60;
stimercount:=60;
spcount:=60;
end;procedure TForm1.Button1Click(Sender: TObject);
var
lgtick1,lgtick2,lgper:tlargeinteger;
ftemp:single;
begin
button2.enabled :=true;
button1.enabled :=false;
timer1.enabled :=true;
timer1.interval :=10;
protimecallback:=timeproc;
htimeid:=timesetevent(10,0,protimecallback,1,1);
acttime1:=gettickcount; //获得系统的高性能频率计数器在一毫秒内的震动次数
queryperformancefrequency(lgper);
ftemp:=lgper/1000;
iten:=trunc(ftemp*10);
queryperformancecounter(lgtick1);
lgtick2:=lgtick1;
spcount:=60;
while spcount>0 do
begin
queryperformancecounter(lgtick2);//如果时钟震动次数超过10毫秒的次数则刷新edit3的显示
if lgtick2 - lgtick1 > iten then
begin
lgtick1 := lgtick2;
spcount := spcount - 0.01;
edit3.text := floattostr(spcount);
application.processmessages;
end;
end;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
edit1.text := floattostr(stimercount);
stimercount:=stimercount-0.01;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
proendcount; //显示从开始记数到记数实际经过的时间
showmessage('实际经过时间'+inttostr(acttime2)+'毫秒');
end;end.