如何起一个线程来显示系统时间 在好多程序的主界面右下方都会显示系统时间,如直接在frmMain上加Timer控件来实现,在子界面上做某种费时的操作时,frmMain上的时间就刷新不了了,各位高手有何好方法?我的初步设想是起个线程来显示时间,但在线程中如何控制frmMain上的Timer控件并触发其事情就搞不定了,请高手赐教! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 单独开一个Thread没必要直接在timer里写就可以了,简单,方便 起个线程来时时刷新,没有必要吧,老大线程是好东西,但是不要滥用呀这样实现吧,不过不是线程的代码哦StatusBar1.Panels.Items[2].Text:='日期:'+datetostr(now());StatusBar1.Panels.Items[2].Text:=StatusBar1.Panels.Items[2].Text+' ';StatusBar1.Panels.Items[2].Text:=StatusBar1.Panels.Items[2].Text+'时间:'+timetostr(now()); 在耗时的代码中加入:Application.ProcessMessages它可以强行使系统处理消息 我是这样做的,没出现你frmMain上的时间就刷新不了的问题!procedure TMain.Timer1Timer(Sender: TObject);begin statusbar1.Panels[1].Text := '日期' + formatdatetime('yyyy年-MM月-dd日',now); statusbar1.Panels[2].Text := '时间' + timetostr(now);end; 对,在时钟OnTimer事件里面写几句代码就可以了,不必搞那么复杂 TTimer 本身就会起一个线程MainFrm上用TTimer显示当前时间,不会受你子窗体上操作的影响,不过不清楚你具体怎么做的...ref: 回复人: vfork(潇湘风情) ( ) 信誉:100 2004-09-17 01:22:00 得分: 0 我是这样做的,没出现你frmMain上的时间就刷新不了的问题! procedure TMain.Timer1Timer(Sender: TObject); begin statusbar1.Panels[1].Text := '日期' + formatdatetime('yyyy年-MM月-dd日',now); statusbar1.Panels[2].Text := '时间' + timetostr(now); end; 同意 restboy思路有些问题,界面的反应应该放在主线程里面,真正需要长时间耗时的操作才应该放在子线程里面处理 StatusBar1.Panels.Items[2].Text:='日期:'+datetostr(now());StatusBar1.Panels.Items[2].Text:=StatusBar1.Panels.Items[2].Text+' ';StatusBar1.Panels.Items[2].Text:=StatusBar1.Panels.Items[2].Text+'时间:'+timetostr(now());目前我就是这么做的,并且N年来一直是这么做的,但是子窗口做某种费时操作时主界面上的时间的确是不动了,比如子窗口正在调存储过程,该存储过程汲及几张百万记录级的表. 同意 WGYKING(修罗封闭中)(前女友要来看我) 的意见。主要是要想法让系统响应你的消息。恩,调用存储过程吗。倒是这种耗时的操作应该放到线程中去。否则不但刷新不了时间,只怕操作也不能响应吧。 试了WGYKING(修罗封闭中)(前女友要来看我)的方法,效果也不是很好谢谢各位,结帐! 如何用delphi做一个程序,可以打开某个网页 小弟能否把 Adobe的PDF阅读控件(acropdf.dll)与我的软件一起发发布吗? 那位高手讲讲CGI???? 已知某程序的句柄,如果得到它的所有子窗口和窗口中各控件的句柄? SpinEdit是什么? 求maxlength-1 长的子串的算法 关于统计发票号的问题。如下: 高分请教~~开发过超市进销存软件的~~请进~~~up有分 如何在DBgrideh里的特定单元格添加一个图片!! 如何让TDBMemo中的文字自动居中呀(横向、纵向),谢谢! exeScope修改Delphi程序出错问题? 如何判断文件是否已经存在?
直接在timer里写就可以了,简单,方便
这样实现吧,不过不是线程的代码哦
StatusBar1.Panels.Items[2].Text:='日期:'+datetostr(now());
StatusBar1.Panels.Items[2].Text:=StatusBar1.Panels.Items[2].Text+' ';
StatusBar1.Panels.Items[2].Text:=StatusBar1.Panels.Items[2].Text+'时间:'+timetostr(now());
Application.ProcessMessages它可以强行使系统处理消息
begin
statusbar1.Panels[1].Text := '日期' + formatdatetime('yyyy年-MM月-dd日',now);
statusbar1.Panels[2].Text := '时间' + timetostr(now);
end;
MainFrm上用TTimer显示当前时间,不会受你子窗体上操作的影响,
不过不清楚你具体怎么做的...ref:
回复人: vfork(潇湘风情) ( ) 信誉:100 2004-09-17 01:22:00 得分: 0
我是这样做的,没出现你frmMain上的时间就刷新不了的问题! procedure TMain.Timer1Timer(Sender: TObject);
begin
statusbar1.Panels[1].Text := '日期' + formatdatetime('yyyy年-MM月-dd日',now);
statusbar1.Panels[2].Text := '时间' + timetostr(now);
end;
StatusBar1.Panels.Items[2].Text:=StatusBar1.Panels.Items[2].Text+' ';
StatusBar1.Panels.Items[2].Text:=StatusBar1.Panels.Items[2].Text+'时间:'+timetostr(now());
目前我就是这么做的,并且N年来一直是这么做的,但是子窗口做某种费时操作时主界面上的时间的确是不动了,比如子窗口正在调存储过程,该存储过程汲及几张百万记录级的表.
主要是要想法让系统响应你的消息。
恩,调用存储过程吗。倒是这种耗时的操作应该放到线程中去。否则不但刷新不了时间,只怕操作也不能响应吧。
谢谢各位,结帐!