線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:800
推到 Plurk!
推到 Facebook!

TFrom的問題

答題得分者是:wameng
chih_kuan
中階會員


發表:38
回覆:82
積分:54
註冊:2003-02-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-04 10:17:56 IP:61.66.xxx.xxx 未訂閱
我有一個TForm 上面放有各式的可輸入控制項元件, 當我不論在其中任一個元件做輸入時.... 要先Check 某一Flag 值, 若成立,則接受,,,,若不成立...則各式的可輸入控制項元件的值,則不會有任何變動(一如往常),請問,除了在每一控制項元件上的 KeyPress寫程式外, 可否有一方式,可以不用寫那麼多程式???
------
叔叔有練過,初學者不要學。
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-04 10:54:56 IP:61.222.xxx.xxx 未訂閱
Procedure Set_ALLEnabled( ParentControl:TwinControl; Const Enabled:Boolean=False); var I :integer; begin For i:=0 to ParentControl.ControlCount-1 do TControl(ParentControl.Controls[i]).Enabled := Enabled; end; procedure TForm1.CheckBox1Click(Sender: TObject); begin Set_ALLEnabled(Self,Not CheckBox1.Checked); CheckBox1.enabled := True; end;
chih_kuan
中階會員


發表:38
回覆:82
積分:54
註冊:2003-02-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-04 11:36:10 IP:61.66.xxx.xxx 未訂閱
wameng 大大 我想您可能曲解我的意思了..我再舉個例說明好了...假設我有一個Form 上面放了十個 TEdit,,,我的意思是說...如果今天...我不管對那一個TEdit輸入資料,在輸入資料時..我必須去判別一個總體的Flag變數,當條件成立時..我才允許發生輸入的TEdit 的值被接受,反之則否,,,重點再於,form上面放的不只一種物件,,可能是TEdit,ComboBox,等...具有接受改變值能力的物件,,,我不想一一在物件的...onkeypress, 或者 onchange 事件中去寫攔截程式,,,,,,可否有另一方面,可以直接從Form上去攔截,,,,,且條件不成立時,各控制項內的值,能自動回復至未變更前的值(如果 原來是1 就回復成1 原來是2 就回復成2 )... 多謝您的賜教~~~
------
叔叔有練過,初學者不要學。
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-04 14:45:27 IP:61.222.xxx.xxx 未訂閱
雖然 Form 有個屬性 KeyPreview := True; 可以接收所有的OnKeyPress... 及鍵盤按下事件。 procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if Not CanEdit then Key := #0; end; 不過,在Combobox 中選擇 Item 就不行了。 或者使用老的笨方法: 所有相同的物件用統一的事件共用就好了。 例如 10 個TEDIT 用同一個 OnKeyPress 再從物件的.TAG 去判斷什麼的。 N 個 Combobox 統一用 OnChange 事件。 只要是事件類型相同,都是可以利用的。 這樣在程式碼中您只會有,一個OnKeypress及OnChange事件 再把相同的程式寫成函數。 在OnKeypress及OnChange事件引用即可。 發表人 - wameng 於 2004/10/04 15:10:14
John Wong
初階會員


發表:1
回覆:35
積分:32
註冊:2004-09-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-08 04:05:33 IP:218.103.xxx.xxx 未訂閱
你所指的總體的Flag變數, 其值的判斷是否與正在輸入的資料有關? 若那個Flag是在輸入前便可以決定的話, 你可以把所有相關的元件放入一個panel或scrollbox內, 不允許輸入時便把panel或scrollbox的enable設為false, 那麼內裏的元件便不能更改, 亦不會變灰, 感覺上就是變成readonly了. 如果你須要在各輸入的元設定相同內容的onkeypress或onchange event, 而又覺得太瑣碎的話, 可以在form的onshow event加入類似以下的程或碼: procedure TFML1.FormShow(Sender: TObject); var i: Integer; begin for i := 0 to ComponentCount -1 do begin if Components[i].ClassName = 'TDBEdit' then begin (Components[i] as TDBEdit).OnEnter := DBEditOnEnter; (Components[i] as TDBEdit).OnExit := DBEditOnExit; end; end; end;
系統時間:2024-06-28 18:55:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!