StringGrid + ComboBox + Control Problem |
尚未結案
|
BorlandUser
中階會員 發表:148 回覆:217 積分:73 註冊:2004-02-19 發送簡訊給我 |
小弟原意是想用一個grid去讓user輸入資料,在某時,會有一個combox彈出來供使用者選擇,所以我在stringgrid的drawcell procedure那裏,寫了code,指名如果gdfocused 的話就會將個combox彈出黎,然後再將combobx set了focus,那樣就可以模擬到當user按下或選了某一欄位時,就會彈一個combobx出來...不過如果只是單單的欄位,當user按下tab或上鍵/下鍵都會移動foucs,不過如果user 選了一個會彈combox的欄位時,就會set了combox為setfoucs...我試著控制combox的keypress,當user按下enter時就會跳至右手邊的欄位,但keypress/keydown都detect不到tab鍵,而且如果我想做到按shift tab可以跳回上個control或前一個欄位就做不到...請問有什麼解決方法呢?謝
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
BorlandUser
中階會員 發表:148 回覆:217 積分:73 註冊:2004-02-19 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
1.以下摘自 Delphi 4 業界標準手冊
..., Delphi 並不讓一個程序(procedure)掌握所有的訊息處理,
而是透過內部的訊息機制, 讓每一個訊息各有其處理程序, 使訊
息的處理工作便得簡明. 用來處理訊息的程序必須滿足以下三大
需求:
procedure TForm1.CMDialogKey(var msg: TCMDialogKey); begin if msg.Charcode <> VK_TAB then inherited; end;以上例而言, 當程式執行到 inherited 這一行時, 它會去找 TForm( 因 TForm1 繼承自 TForm) 中有處理 CM_DialogKey 這個程序, 如果有就 執行, 若當中再遇到 inherited 保留字的話, 它就再去找 TCustomForm (TForm 繼承自 TCustomForm)中處理 CM_DialogKey 這個程序, 一直這樣 往上推. -- 悟嗎? |
BorlandUser
中階會員 發表:148 回覆:217 積分:73 註冊:2004-02-19 發送簡訊給我 |
|
BorlandUser
中階會員 發表:148 回覆:217 積分:73 註冊:2004-02-19 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
BorlandUser
中階會員 發表:148 回覆:217 積分:73 註冊:2004-02-19 發送簡訊給我 |
|
BorlandUser
中階會員 發表:148 回覆:217 積分:73 註冊:2004-02-19 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
引言: 1. 那inherited 是預設, 對嗎???? 2. 那句應該放在那裏呢? "CMDialogKey" 嗎 ?1.inherited 是執行父代的行為 2. 試試: procedure TForm1.CMDialogKey(var msg: TCMDialogKey); begin if msg.Charcode <> VK_TAB then begin inherited; If GetKeyState(VK_SHIFT ) < 0 Then // 按下 shift 鍵 end; end;-- 悟嗎? |
BorlandUser
中階會員 發表:148 回覆:217 積分:73 註冊:2004-02-19 發送簡訊給我 |
procedure TForm1.CMDialogKey(Var Msg: TWMKEY);
begin
inherited;
if (ActiveControl = ComboBox) Then
Begin
If (GetKeyState(VK_SHIFT ) < 0) And (Msg.Charcode = VK_TAB) Then
Begin
Form1.TabOrder := Form1.TabOrder - 1;
End; If (Msg.Charcode = VK_RETURN) Then
begin
StringGrid.Col := 4;
StringGrid.SetFocus;
End;
End;
end; 這是我的代碼, 因為我將combox 和stringgrid連在一起,當user focus在某一個欄位時就會focus on combobox,當user按下enter,就會向右移一格,如果按下shift tab 就會跳去上個taborder,但結果好像不太明顯,要按兩下tab shift才有反應,why?
|
BorlandUser
中階會員 發表:148 回覆:217 積分:73 註冊:2004-02-19 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |