請教大大們,小弟的timer動作怪怪的,可以告訴我是啥原因嗎 |
答題得分者是:wameng
|
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
小弟的程式有用到Timer,但總感覺Timer沒動作,單步執行卻又無異常現象,我把Timer設在迴圈裡當延遲用,但總是沒動作迴圈就跑完了,請教大大們可以看一下是哪一行程式用錯了,謝謝
程式說明:當按下按鈕,迴圈從1 to 5,間隔3秒把轉換值由Label秀到畫面,但當我把按鈕按下時,迴圈就已經跑完了,Timer完全沒延遲作用,是小弟犯了邏輯上還是觀念上的錯誤
< class="code">
procedure TForm1.Timer1Timer(Sender: TObject);
Timer1.Enabled := False; //Disable Timer
//Timer.interval = 3000==>3 Seconds
end;
procedure TForm1.BitbtnClick(Sender: TObject);
var
InByte : array[0..6] of byte;
i : Integer ;
MeterVal : Smallint;
begin
InByte[0] := $01 ;
InByte[1] := $03 ;
InByte[2] := $02 ;
InByte[3] := $8A ;
InByte[4] := $03 ;
InByte[5] := $EA ;
InByte[6] := $FA ; for i := 0 to 5 do
begin
MeterVal := HexToSignInt(InByte,i); //每次把InByte陣列的2個元素轉成Sign Integer,i是轉換的起始位址
label1.Caption := IntToStr(MeterVal); //把轉換後的值用label秀在畫面上
Timer1.Enabled := True; [green]//Trigger Timer
end
end;
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi wychen57, 大致是這樣,你參考一下
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Timer1: TTimer; Label1: TLabel; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } Count : Word; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Timer1.Enabled := False; Timer1.Interval := 3000; end; procedure TForm1.Button1Click(Sender: TObject); begin Count := 0; Timer1.OnTimer(Timer1); Timer1.Enabled := True; end; procedure TForm1.Timer1Timer(Sender: TObject); var InByte : array[0..6] of byte; i : Integer ; MeterVal : Smallint; begin InByte[0] := $01 ; InByte[1] := $03 ; InByte[2] := $02 ; InByte[3] := $8A ; InByte[4] := $03 ; InByte[5] := $EA ; InByte[6] := $FA ; case count of 0..6 : begin // MeterVal := HexToSignInt(InByte,i); //每次把InByte陣列的2個元素轉成Sign Integer,i是轉換的起始位址 MeterVal := InByte[Count]; label1.Caption := IntToStr(MeterVal); //把轉換後的值用label秀在畫面上 Inc(Count); end; else Timer1.Enabled := False; end; end; end.---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman |
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
我覺得倒不如這樣
Procedure sysDelay(aMs: Longint); var TickCount : LongInt; begin TickCount:=GetTickCount; while GetTickCount - TickCount < aMs do Application.ProcessMessages end; procedure TForm1.BitbtnClick(Sender: TObject); var InByte : array[0..6] of byte; i : Integer ; MeterVal : Smallint; begin InByte[0] := $01 ; InByte[1] := $03 ; InByte[2] := $02 ; InByte[3] := $8A ; InByte[4] := $03 ; InByte[5] := $EA ; InByte[6] := $FA ; for i := 0 to 5 do begin MeterVal := HexToSignInt(InByte,i); //每次把InByte陣列的2個元素轉成Sign Integer,i是轉換的起始位址 label1.Caption := IntToStr(MeterVal); //把轉換後的值用label秀在畫面上 sysDelay(1000); {停留 1 秒} end end;發表人 - wameng 於 2005/05/19 10:08:00 |
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
|
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
引言: 我覺得倒不如這樣以上錯誤能告訴小弟是啥造成的錯誤,有啥沒uses才會這樣Procedure sysDelay(aMs: Longint); var TickCount : LongInt; begin TickCount:=GetTickCount; 大大,這行編譯時會出現undeclared identifier 'gettickcount' while GetTickCount - TickCount < aMs do Application.ProcessMessages 這行編譯時會出現undeclared identifier 'Application' missing operator or semicolon end; |
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |