請教ONTIME事件的設定 |
尚未結案
|
shiungyi
一般會員 發表:14 回覆:33 積分:9 註冊:2003-05-16 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
wnhoo
高階會員 發表:75 回覆:443 積分:198 註冊:2003-04-22 發送簡訊給我 |
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls; type
TForm1 = class(TForm)
Timer1: TTimer;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1;
tmphh:word;
implementation {$R *.dfm}
//启动TIMER
procedure TForm1.Button1Click(Sender: TObject);
var
hh,mm,ss,ms:word;
begin
DecodeTime(time,hh,mm,ss,ms);
tmphh:=hh+1;
Timer1.Interval:=200;
Timer1.Enabled:=true; end; //检测是否为一小时
procedure TForm1.Timer1Timer(Sender: TObject);
var
hh,mm,ss,ms:word;
begin
DecodeTime(time,hh,mm,ss,ms);
IF HH=TMPHH THEN
BEGIN
//每各一小时,自动增加记数1
tmphh:=hh+1;
//.............
//你的操作!
END;
end; end. 风花雪月 e梦情缘
------
风花雪月 e梦情缘 |
turboted
版主 發表:95 回覆:754 積分:452 註冊:2002-07-23 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
第三者評價 :
wnhoo 兄的方法 :
1. 每秒做5次 Decode date 一小時裡做 60 X 60 X 5 = 1800 次 Decode Date 來為了一次的使用似乎有點浪費資源
2. 最多只能運作一天因午夜 後 Tmphh 永遠比 hh 大。 turboted 版主的方法應可行, Delphi 的程式碼如下 :
var Form1 : TForm1; Clock : integer; procedure TForm1.FormCreate(Sender : TObject); begin .... .... clock := 0; end; procudure TForm1.Timer1Timer(Sender : TObject); begin inc(Clock); if clock = 60 then begin //做你想做的事 clock := 0; //<--別忘了把clock 清除 end; end;不用給分我因我只是評價和翻譯。 |
wnhoo
高階會員 發表:75 回覆:443 積分:198 註冊:2003-04-22 發送簡訊給我 |
Justmade兄的评论是对的,我的方法是有点浪费资源。 但刚开始运行TIMER时候,必须每5秒左右检查一次,因为第一次运行时间距正点不定;但第一次运行后应加大点,就30分钟一次吧 部分改动一下:
//检测是否为一小时
procedure TForm1.Timer1Timer(Sender: TObject);
var
hh,mm,ss,ms:word;
begin
DecodeTime(time,hh,mm,ss,ms);
IF HH=TMPHH THEN
BEGIN
//根据实际情况,自行调整
Timer1.Interval:=30*60*1000;
//每各一小时,自动增加记数1
tmphh:=hh 1;
//.............
//你的操作!
END;
end; 风花雪月 e梦情缘
------
风花雪月 e梦情缘 |
wnhoo
高階會員 發表:75 回覆:443 積分:198 註冊:2003-04-22 發送簡訊給我 |
Justmade兄的评论是对的,我的方法是有点浪费资源。 但刚开始运行TIMER时候,必须每5秒左右检查一次,因为第一次运行时间距正点不定;但第一次运行后应加大点,就30分钟一次吧 部分改动一下:
//检测是否为一小时
procedure TForm1.Timer1Timer(Sender: TObject);
var
hh,mm,ss,ms:word;
begin
DecodeTime(time,hh,mm,ss,ms);
IF HH=TMPHH THEN
BEGIN
//根据实际情况,自行调整
Timer1.Interval:=30*60*1000;
//每各一小时,自动增加记数1
tmphh:=hh 1;
//.............
//你的操作!
END;
end; 风花雪月 e梦情缘
------
风花雪月 e梦情缘 |
wnhoo
高階會員 發表:75 回覆:443 積分:198 註冊:2003-04-22 發送簡訊給我 |
Justmade兄的评论是对的,我的方法是有点浪费资源。 但刚开始运行TIMER时候,必须每5秒左右检查一次,因为第一次运行时间距正点不定;但第一次运行后应加大点,就30分钟一次吧 部分改动一下:
//检测是否为一小时
procedure TForm1.Timer1Timer(Sender: TObject);
var
hh,mm,ss,ms:word;
begin
DecodeTime(time,hh,mm,ss,ms);
IF HH=TMPHH THEN
BEGIN
//根据实际情况,自行调整
Timer1.Interval:=30*60*1000;
//每各一小时,自动增加记数1
tmphh:=hh 1;
//.............
//你的操作!
END;
end; 风花雪月 e梦情缘
------
风花雪月 e梦情缘 |
shiungyi
一般會員 發表:14 回覆:33 積分:9 註冊:2003-05-16 發送簡訊給我 |
對不起
因為又出現新的問題
請問在DELPHI中使用SQL語法
是否有限制
以下是小弟的原始碼
with Query1 do begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('insert into STBCFC');
Query1.SQL.Add('values'(''+curr+'',''+bank+'',''+ser_no+'',)');
Query1.SQL.Add(''+top+'',''+date+'',''+job_code+'',''+data_no+'',);
Query1.SQL.Add(''+ban_idno+'',''+p_code+'',''+p_date+'',''+name+'',);
Query1.SQL.Add(''+kind_code+'',''+data_kind+'',''+data_atm_sign+'',);
Query1.SQL.Add(''+data_atm+'',''+inst_amt_sign+'',''+inst_amt+'',);
Query1.SQL.Add(''+ward_split+'',''+cntry+'',''+nt_exchg_rate+'',);
Query1.SQL.Add(''+swift_bank+'',''+oppo_bank+'',''+data_source+'');
ExecSQL;
end ***[Error] Unit1.pas(83): Too many actual parameters 請各位高手賜教 謝謝
|
turboted
版主 發表:95 回覆:754 積分:452 註冊:2002-07-23 發送簡訊給我 |
|
shiungyi
一般會員 發表:14 回覆:33 積分:9 註冊:2003-05-16 發送簡訊給我 |
|
cmj
高階會員 發表:15 回覆:242 積分:226 註冊:2002-06-12 發送簡訊給我 |
引言: 請問 小弟目前撰寫一支程式 必須每整點讀檔一次 然後UPDATE回DATABASE 可是TIMER的INTERVAL所允許的時間長度不夠 請問該如何設定,方能使程式每整點執行一次 PS.小弟是第一次寫DELPHI程式,工具為DELPHI4,之前有試過 以WINDOW排程來設定,但因其最快也只能每日一次,不符需求 希望各位高手能指點迷津 謝謝 關於你的timer問題提供一點建議 1.你的程式應該是一直執行中. 2.必須每整點讀檔一次,因為是整點讀檔所以只要進入Timer1Timer事件中判斷NOW是否為整點時間再讀檔. 3.INTERVAL要設多久一次觸發並不重要一分鍾,10分鍾,30鍾,那只是觸發次數多少而已不影響整點讀檔的次數. 4.建議進入讀檔前把Timer.Enabled:=False暫時關掉Timer,讀檔完畢在把Timer.Enabled:=True讓Timer繼續運作,這樣較不會出問題. |
shiungyi
一般會員 發表:14 回覆:33 積分:9 註冊:2003-05-16 發送簡訊給我 |
|
turboted
版主 發表:95 回覆:754 積分:452 註冊:2002-07-23 發送簡訊給我 |
作法一(直覺的作法)
如果你要整點的話
我看你可能要先知道你可容許的最小誤差
如果您要剛剛好整點,1 sec都不能差的話
我想,您應該就是每1sec 就要check一次現在的時間
什麼時處發ontimer取決於您的『可容許的最小誤差』
如果您可接受一分鐘的誤差,那ontimer就可設一分鐘處發一次
然後再用GetLocalTime API去比對就行 作法二(比較有效率)
系統一開始RUN..你就先讀現在的時間
讀了之後,你就算還要多久時間才到
這時,你就把ONTIMER的處發時間設到那個時間之前一點點就可以
處發完後,之後時間就準了,再60min就是下一個整點 發表人 - turboted 於 2003/05/19 17:43:12
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |