請問如何做到不用timer,於程式執行5秒後自動秀出訊息 |
答題得分者是:Zard
|
terrychen
尊榮會員 發表:90 回覆:794 積分:501 註冊:2003-05-01 發送簡訊給我 |
|
Zard
尊榮會員 發表:24 回覆:396 積分:539 註冊:2003-11-26 發送簡訊給我 |
引言: 如題 ~~應無所住而生其心~~ unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} threadvar dwStartTime: DWORD; Function TimerThread(pParam: Pointer): DWORD; stdcall; begin dwStartTime := DWORD(pParam^); while (GetTickCount - dwStartTime) < 5000 do begin // 不加Sleep我在我的電腦試會怪怪的, 由其是在快速連點Button1時, // 前面的兩三個Thread會在不到五秒就結束迴圈, 我也不知道為什麼, // 您可以試試. Sleep(10); end; MessageBox(0, '5秒', '5秒', MB_OK); end; procedure TForm1.Button1Click(Sender: TObject); var dwThreadStartTime, dwThreadID: DWORD; hThread: THandle; begin dwThreadStartTime := GetTickCount(); hThread := CreateThread(nil, 0, @TimerThread, @dwThreadStartTime, 0, dwThreadID); CloseHandle(hThread); end; end. |
terrychen
尊榮會員 發表:90 回覆:794 積分:501 註冊:2003-05-01 發送簡訊給我 |
|
Zard
尊榮會員 發表:24 回覆:396 積分:539 註冊:2003-11-26 發送簡訊給我 |
引言: 感謝回應 小弟想做的是,自動顯示訊息 而非藉由點選按鈕顯示 ~~應無所住而生其心~~原理一樣, 用一個Thread去計算時間. unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormShow(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} var bStop: BOOL; Function TimerThread(pParam: Pointer): DWORD; stdcall; var dwStartTime: DWORD; begin dwStartTime := GetTickCount; while(Not bStop) do begin while (GetTickCount - dwStartTime) < 5000 do begin Sleep(10); end; if bStop then break; MessageBox(0, '5秒', '5秒', MB_OK); dwStartTime := GetTickCount; end; end; procedure TForm1.FormShow(Sender: TObject); var dwThreadID: DWORD; hThread: THandle; begin bStop := FALSE; hThread := CreateThread(nil, 0, @TimerThread, nil, 0, dwThreadID); CloseHandle(hThread); end; procedure TForm1.FormDestroy(Sender: TObject); begin bStop := TRUE; end; end. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |