全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1447
推到 Plurk!
推到 Facebook!

Enter&Tab 問題

尚未結案
JamesLiang
初階會員


發表:54
回覆:78
積分:31
註冊:2003-02-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-23 14:49:59 IP:67.124.xxx.xxx 未訂閱
請教先進..delphi在預設的狀態是使用tab來移動欄位的順序,但我看過使用enter鍵也有同樣的效果,請問是如何做的? 多謝
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-23 15:37:30 IP:211.23.xxx.xxx 未訂閱
引言: 請教先進..delphi在預設的狀態是使用tab來移動欄位的順序,但我看過使用enter鍵也有同樣的效果,請問是如何做的? 多謝
在keypress判斷來源是否為enter鍵, 然後進行移動欄位的動作, 若目前focus control為dbgrid類型則移動到下一個cell 若目前focus control為memo或richedit類型則維持換行的動作, 美國的erp多如牛毛,哇,想必很是精采, 可否多推薦幾家呢,是否能附上網址. 發表人 - hahalin 於 2003/03/23 15:38:36
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-23 17:44:24 IP:61.10.xxx.xxx 未訂閱
Form 的 Preview Key 設 True 確定所有 Button 的 Default 設 False    設好Form 的 OnKeyPress :
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = vk_Return then
    if (Form1.ActiveControl IS TCustomMemo) or (Form1.ActiveControl IS TCustomGrid) then
      exit
    else
      Form1.ActiveControl := Form1.FindNextControl(Form1.ActiveControl,true,true,true);
end;
你可能要因應你用的元件再作修改。 其實當初 Windows 95 開始取代 DOS 就一直引起不少爭論,究竟使用 DOS 用家習慣使用的 Enter 跳欄位好還是 使用 Window 新標準 Tab 好。但後來由於越來越多人使用 Windows 的其他不同軟件,使用 Enter 反而會令使用者慢慢覺得格格不入,所以現在已經很少人會用 Enter 了。
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-23 18:00:59 IP:218.160.xxx.xxx 未訂閱
假設dbgrid 有5個欄位 你可以在dbgrid的onkeypress事件寫

   if (DBGrid1.SelectedIndex = 0) and (key = #13) then
     DBGrid1.SelectedIndex := 1
   else if (DBGrid1.SelectedIndex = 1) and (key = #13) then
     DBGrid1.SelectedIndex := 2
   else if (DBGrid1.SelectedIndex = 2) and (Key = #13) then
     DBGrid1.SelectedIndex := 3
   else if (DBGrid1.SelectedIndex = 3) and (Key = #13) then
     DBGrid1.SelectedIndex := 4 <--最後一欄
   else if (DBGrid1.SelectedIndex = 4) and (Key = #13) then
   begin  
     query1.next; <---跳下一筆
     DBGrid1.SelectedIndex := 0 ; <-- 跳第一欄
     if query1.Eof then  <--如果是最後一筆
     begin  
       query1.first; <---跳回第一筆
       DBGrid1.SelectedIndex := 0;<-- 跳第一欄
     end;
   end;           
天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
joseph110
一般會員


發表:19
回覆:28
積分:9
註冊:2002-09-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-24 11:52:04 IP:163.29.xxx.xxx 未訂閱
我的經驗是使用者習慣,只要User習慣Tab,至於Enter,User就不會太在意.
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-24 12:53:55 IP:61.219.xxx.xxx 未訂閱
KeyDown(Sender: TObject; var Key: Word;  Shift: TShiftState); 偶有一個疑問, 既然攔截 KeyDown Event, 為何不直接 assign  (var Key) Key := #9; 呢 ? /* Free 和 Create 一樣重要 */
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-24 15:36:08 IP:61.10.xxx.xxx 未訂閱
引言: KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); 偶有一個疑問, 既然攔截 KeyDown Event, 為何不直接 assign (var Key) Key := #9; 呢 ?
我試過了,不成,沒有用處,而再攔截 KeyUp 時 Key 又變回 #13 了。 所以,我也不知道為何要 Key 是 Send by Reference 的。
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-24 16:27:21 IP:61.219.xxx.xxx 未訂閱
引言:
引言: KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); 偶有一個疑問, 既然攔截 KeyDown Event, 為何不直接 assign (var Key) Key := #9; 呢 ?
我試過了,不成,沒有用處,而再攔截 KeyUp 時 Key 又變回 #13 了。 所以,我也不知道為何要 Key 是 Send by Reference 的。
了解 可能是
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-03-24 16:40:14 IP:211.74.xxx.xxx 未訂閱
提供另一個做法 procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if Key <> #13 then exit; if not (ActiveControl is TDBGrid) then begin Key := #0; Perform(WM_NEXTDLGCTL, 0, 0); exit; end; end; TYR TRY SEE
引言: 請教先進..delphi在預設的狀態是使用tab來移動欄位的順序,但我看過使用enter鍵也有同樣的效果,請問是如何做的? 多謝
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-03-24 17:25:31 IP:61.219.xxx.xxx 未訂閱
引言: 請教先進..delphi在預設的狀態是使用tab來移動欄位的順序,但我看過使用enter鍵也有同樣的效果,請問是如何做的? 多謝
試試 :
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
   if (Key=#13) then begin
     Key := #0; // 吃掉 [Enter]
     TControl(Sender).perform(WM_KEYDOWN,9,0);
     TControl(Sender).perform(WM_KEYUP,9,0);
   end;
end;
吃掉 [Enter] 可能會造成操作介面不流暢喔. 也可以考慮不要Key := #0; 最好再搭配 DataSet.State 加以判斷. /* Free 和 Create 一樣重要 */ 發表人 - Mickey 於 2003/03/24 18:13:48
cmj
高階會員


發表:15
回覆:242
積分:226
註冊:2002-06-12

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-03-24 19:13:15 IP:211.76.xxx.xxx 未訂閱
引言: 請教先進..delphi在預設的狀態是使用tab來移動欄位的順序,但我看過使用enter鍵也有同樣的效果,請問是如何做的? 多謝
提供一個元件不用寫程式可解決你的需求. http://vcl.vclxx.org 全部免費元件/工具 ->其他非視覺化元件或單元-2->找dosmove.zip下載 解壓縮後把dosmove.pas加入你的package->compile->install->產生dosmove元件,把元件加入Form中即可.
系統時間:2024-06-24 19:46:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!