Wolfgang Chien's Homepage | Delphi學習筆記 - 問答篇 |
我想在一無窮迴圈中,讓使用者敲一Button或類似元件才使程式跳到另一TForm,若User不敲Then 繼續執行迴我該如何做?
同意並重覆葛瑞菲先生對這個問題的疑問:
>Event Driven 的 Delphi 有必要這樣做嗎?
雖然也覺得沒有必要(而且危險), 不過一定要的話, 請您參考一下這個例子:
![]() |
1. File | New Project 開始一個專案 |
![]() |
2. 在Form1中安置兩個 Button, 一個 Label |
![]() |
3. 在 Form1 的宣告中加入以下兩個變數
type TForm1 = class(TForm) ... private { Private declarations } fProcessing: boolean; fStop: boolean; ... |
![]() |
4. 在 Button1 的 OnClick 事件中撰寫下列程式:
procedure TForm1.Button1Click(Sender: TObject); begin (* 迴圈已在執行, 立刻離開本事件程序 *) if fProcessing then Exit; fProcessing := True; fStop := False; while True do (* 無窮迴圈 *) begin (* 在無窮迴圈中, 讓其他的物件與應用程式 有機會獲得控制權 *) Application.ProcessMessages; if fStop then break; (* 使用者已按下 Button2 *) Label1.Caption := IntToStr(GetTickCount); end; fProcessing := False; end; |
![]() |
5. 在 Button2 的 OnClick 事件中撰寫下列程式:
procedure TForm1.Button2Click(Sender: TObject); begin fStop := True; (* 建立終止旗標 *) end; |
![]() |
6. 執行這個程式 |
關鍵在於無窮迴圈中, 迴圈程式不能死抓著控制權不放, 這點可以Application.ProcessMessages;解決, 然後由其他的控制項設定迴圈的結束條件。
首頁 | 學習筆記 | 主題公園 | 軟體下載 | 關於本站 | 討論信群 | 相約下次 |