程式本身已經在一個ButtonA内執行,怎樣才能偵測到寧一個ButtonB有Check事件的產生? |
尚未結案
|
jasonyangpeng
一般會員 發表:2 回覆:6 積分:1 註冊:2005-07-26 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
不會有這樣的結構。 幾點理由:
1. ButtonAClick 在執行時,基本上是處於沒有回應狀態。
因此既使點選CheckBox 也必須等到ButtonAClick 執行完畢才會處於Checked狀態。
2. 可在迴圈內加入 Application.ProcessMessages 雖然可以解決此問題。
但相對付出的是應用程式效能很差會有遲鈍的效果。並佔用了多數CPU效能。
不建議這樣做。太沒....
3. 建議透過 Thread 或者 重新思考流程。先CheckBox -> ButtonA 參考。 ~~~~~~~~~~~
難得聰明,常常糊塗。
~~~~~~~~~~~
|
chris_shieh
高階會員 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
var bChecked:Boolean; procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin i:=1; While i>0 do begin Application.ProcessMessages; if bChecked then begin Showmessage('checked'); break; end; end; end; procedure TForm1.Button2Click(Sender: TObject); begin bChecked:=True; end;@瞭解越多.懂得越少@ |
jasonyangpeng
一般會員 發表:2 回覆:6 積分:1 註冊:2005-07-26 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
>關鍵是在Thread中我怎樣才能檢測到ButtonB有Check的動作
方法有很多種。主要是看您的Thread.execute 寫法。 1. 可設定全域變數如:BtnBChecked : Boolean 。
在ButtonB有Check的動作,設定 BtnBChecked :=True;
這就無須考慮讀取物件必須Synchronize 的問題。 2. 或者利用 PostThreadMessage 的方式,傳達給Thread 知道。 主要還是看你的用途或流程或Thread定位於何種工作而定。 ~~~~~~~~~~~
難得聰明,常常糊塗。
~~~~~~~~~~~
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |