delphi key值表

Shift 是一個集合變量。
type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);
也就是說TShiftstate類型有ssShift, ssAlt, ssCtrl, ssLeft(鼠標左鍵), ssRight(鼠標右鍵), ssMiddle(鼠標中鍵), ssDouble (鼠標雙擊)

Value Meaning
ssShift               The Shift key is held down.
ssAlt                  The Alt key is held down.
ssCtrl                The Ctrl key is held down.
ssLeft                The left mouse button is held down.
ssRight             The right mouse button is held down.
ssMiddle            The middle mouse button is held down.
ssDouble          The mouse was double-clicked.

用來判斷組合鍵中是否用shift、Ctrl、鼠標左鍵、右鍵、中鍵、雙擊事件。

 

Delphi中一些常用的組合鍵值

CTRL+A:#1 CTRL+B:#2 CTRL+C:#3 CTRL+D:#4 CTRL+E:#5 CTRL+F:#6 CTRL+G:#7
CTRL+H:#8 CTRL+I:#9 CTRL+J:#10 CTRL+K:#11 CTRL+L:#12 CR:#13 CTRL+N:#14
CTRL+O:#15 CTRL+P:#16 CTRL+Q:#17 CTRL+R:#18 CTRL+S:#19 CTRL+T:#20
CTRL+U:#21 CTRL+V:#22 CTRL+W:#23 CTRL+X:#24 CTRL+Y:#25 CTRL+Z:#26 ESC:#27
CTRL+:#28 CTRL+]:#29 SHIFT+CTRL+-:#30 DEL:#127
 

一般用在keydown、keyup、keypress事件中。
OnKeyDown和OnKeyUp事件中的Key是Word型的,表示用戶按的是鍵盤上的哪個鍵,OnKeyPress中的Key是Char型,表示用戶輸入什麼字符。一個產生8位(char)常規健值,一個產生16位(word)功能健健值。


1.KeyPress主要用來捕獲數字(注意:包括Shift+數字的符號)、字母(注意:包括大小寫)、小鍵盤等除了F1-12、SHIFT、Alt、Ctrl、Insert、Home、PgUp、Delete、End、PgDn、ScrollLock、Pause、NumLock、{菜單鍵}、{開始鍵}和方向鍵外的ANSI字符,KeyDown和KeyUp 通常可以捕獲鍵盤除了PrScrn所有按鍵(這裏不討論特殊鍵盤的特殊鍵)

2.KeyPress 只能捕獲單個字符

KeyDown 和KeyUp 可以捕獲組合鍵。

3.KeyPress 可以捕獲單個字符的大小寫

4.KeyDown和KeyUp 對於單個字符捕獲的KeyValue 都是一個值,也就是不能判斷單個字符的大小寫。

5.KeyPress 不區分小鍵盤和主鍵盤的數字字符。

KeyDown 和KeyUp 區分小鍵盤和主鍵盤的數字字符。

6.其中PrScrn 按鍵KeyPress、KeyDown和KeyUp 都不能捕獲。


keydown是鍵盤按下任何鍵
keypress是鍵盤按下任何數字鍵和任何字母鍵

 

keydown 與keypress的聲明格式差別很大

1 onkeydown事件
type TKeyEvent   =   procedure   (Sender:   TObject;   var   Key:   Word;   Shift:   TShiftState)   of   object;
property   OnKeyDown:   TKeyEvent;
該事件在有任何鍵按下的時候,就發生。看!它響應的是Word類型,還能識別Shift鍵狀態
2 onkeypress事件
type   TKeyPressEvent   =   procedure   (Sender:   TObject;   var   Key:   Char)   of   object;
property   OnKeyPress:   TKeyPressEvent;
該事件響應的是字符類型Char,只能識別ASCII碼,不能識別組合鍵和控制鍵和功能鍵。按下功能鍵、控制鍵不產生該事件,但產生OnkeyDown事件。

 

TWinControl與鍵盤相關的3個事件如下:
OnKeyDown:鍵按下
OnKeyPress:有Ascii字符產生
OnKeyUp:鍵放開

其中OnKeyDown、OnKeyUp對任何按鍵都有響應,傳入參數爲
var   Key:   Word 鍵的掃描值
    Shift:   TShiftState 表示控制鍵狀態,包括鍵盤上的Ctrl、Shift、Alt和鼠標的左、中、右鍵及雙擊。
 
OnKeyPress事件只對Ascii有響應,傳入參數爲
var   Key:   Char Ascii字符
//例如F1-F10只有onKeydown有反應

另外TWincontrol.   KeyPreview:Boolean屬性確定控件是否在子控件之前處理按鍵。

 

比如說enter鍵,
onkeypress事件

if  key=#13   then    //當你按下enter鍵時觸發該事件
do  something

 
onkeydown事件
if  key=13  then     //當你按下enter鍵時觸發該事件
do  something

 

 

其中所有的KeyDown事件裏面應該用如下判斷:
if Key = VK_RETURN then
...
所有的KeyPress事件裏面應該用如下判斷:
if Key = #13 then
...

postmessage(self.handle,wm_keydown,vk_tab,0);
keybd_event(VK_TAB,2,0,0);
perform(WM_NEXTDLGCTL,0,0);
SelectNext(ActiveControl, True, True);
...

但是顯然用回車代碼TAB顯然不適合於BUTTON,你在它上面按回車的時候它會執行OnClick,所以不會TAB,你可以用別的鍵代替回車。

 

》》》》》》》》》》

 

鍵值

 

在keydown事件裏面
showmessage(inttostr(key));
在keypress事件裏面
showmessage(key);
就知道了。

Form1.KeyPreview := True;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Showmessage(IntToStr(Key));
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
Showmessage(IntToStr(Ord(Key)));
end;


{ Virtual Keys, Standard Set }
{$EXTERNALSYM VK_LBUTTON}
VK_LBUTTON = 1;
{$EXTERNALSYM VK_RBUTTON}
VK_RBUTTON = 2;
{$EXTERNALSYM VK_CANCEL}
VK_CANCEL = 3;
{$EXTERNALSYM VK_MBUTTON}
VK_MBUTTON = 4; { NOT contiguous with L & RBUTTON }
{$EXTERNALSYM VK_BACK}
VK_BACK = 8;
{$EXTERNALSYM VK_TAB}
VK_TAB = 9;
{$EXTERNALSYM VK_CLEAR}
VK_CLEAR = 12;
{$EXTERNALSYM VK_RETURN}
VK_RETURN = 13;
{$EXTERNALSYM VK_SHIFT}
VK_SHIFT = $10;
{$EXTERNALSYM VK_CONTROL}
VK_CONTROL = 17;
{$EXTERNALSYM VK_MENU}
VK_MENU = 18;
{$EXTERNALSYM VK_PAUSE}
VK_PAUSE = 19;
{$EXTERNALSYM VK_CAPITAL}
VK_CAPITAL = 20;
{$EXTERNALSYM VK_KANA }
VK_KANA = 21;
{$EXTERNALSYM VK_HANGUL }
VK_HANGUL = 21;
{$EXTERNALSYM VK_JUNJA }
VK_JUNJA = 23;
{$EXTERNALSYM VK_FINAL }
VK_FINAL = 24;
{$EXTERNALSYM VK_HANJA }
VK_HANJA = 25;
{$EXTERNALSYM VK_KANJI }
VK_KANJI = 25;
{$EXTERNALSYM VK_CONVERT }
VK_CONVERT = 28;
{$EXTERNALSYM VK_NONCONVERT }
VK_NONCONVERT = 29;
{$EXTERNALSYM VK_ACCEPT }
VK_ACCEPT = 30;
{$EXTERNALSYM VK_MODECHANGE }
VK_MODECHANGE = 31;
{$EXTERNALSYM VK_ESCAPE}
VK_ESCAPE = 27;
{$EXTERNALSYM VK_SPACE}
VK_SPACE = $20;
{$EXTERNALSYM VK_PRIOR}
VK_PRIOR = 33;
{$EXTERNALSYM VK_NEXT}
VK_NEXT = 34;
{$EXTERNALSYM VK_END}
VK_END = 35;
{$EXTERNALSYM VK_HOME}
VK_HOME = 36;
{$EXTERNALSYM VK_LEFT}
VK_LEFT = 37;
{$EXTERNALSYM VK_UP}
VK_UP = 38;
{$EXTERNALSYM VK_RIGHT}
VK_RIGHT = 39;
{$EXTERNALSYM VK_DOWN}
VK_DOWN = 40;
{$EXTERNALSYM VK_SELECT}
VK_SELECT = 41;
{$EXTERNALSYM VK_PRINT}
VK_PRINT = 42;
{$EXTERNALSYM VK_EXECUTE}
VK_EXECUTE = 43;
{$EXTERNALSYM VK_SNAPSHOT}
VK_SNAPSHOT = 44;
{$EXTERNALSYM VK_INSERT}
VK_INSERT = 45;
{$EXTERNALSYM VK_DELETE}
VK_DELETE = 46;
{$EXTERNALSYM VK_HELP}
VK_HELP = 47;
{ VK_0 thru VK_9 are the same as ASCII ’0’ thru ’9’ ($30 - $39) }
{ VK_A thru VK_Z are the same as ASCII ’A’ thru ’Z’ ($41 - $5A) }
{$EXTERNALSYM VK_LWIN}
VK_LWIN = 91;
{$EXTERNALSYM VK_RWIN}
VK_RWIN = 92;
{$EXTERNALSYM VK_APPS}
VK_APPS = 93;
{$EXTERNALSYM VK_NUMPAD0}
VK_NUMPAD0 = 96;
{$EXTERNALSYM VK_NUMPAD1}
VK_NUMPAD1 = 97;
{$EXTERNALSYM VK_NUMPAD2}
VK_NUMPAD2 = 98;
{$EXTERNALSYM VK_NUMPAD3}
VK_NUMPAD3 = 99;
{$EXTERNALSYM VK_NUMPAD4}
VK_NUMPAD4 = 100;
{$EXTERNALSYM VK_NUMPAD5}
VK_NUMPAD5 = 101;
{$EXTERNALSYM VK_NUMPAD6}
VK_NUMPAD6 = 102;
{$EXTERNALSYM VK_NUMPAD7}
VK_NUMPAD7 = 103;
{$EXTERNALSYM VK_NUMPAD8}
VK_NUMPAD8 = 104;
{$EXTERNALSYM VK_NUMPAD9}
VK_NUMPAD9 = 105;
{$EXTERNALSYM VK_MULTIPLY}
VK_MULTIPLY = 106;
{$EXTERNALSYM VK_ADD}
VK_ADD = 107;
{$EXTERNALSYM VK_SEPARATOR}
VK_SEPARATOR = 108;
{$EXTERNALSYM VK_SUBTRACT}
VK_SUBTRACT = 109;
{$EXTERNALSYM VK_DECIMAL}
VK_DECIMAL = 110;
{$EXTERNALSYM VK_DIVIDE}
VK_DIVIDE = 111;
{$EXTERNALSYM VK_F1}
VK_F1 = 112;
{$EXTERNALSYM VK_F2}
VK_F2 = 113;
{$EXTERNALSYM VK_F3}
VK_F3 = 114;
{$EXTERNALSYM VK_F4}
VK_F4 = 115;
{$EXTERNALSYM VK_F5}
VK_F5 = 116;
{$EXTERNALSYM VK_F6}
VK_F6 = 117;
{$EXTERNALSYM VK_F7}
VK_F7 = 118;
{$EXTERNALSYM VK_F8}
VK_F8 = 119;
{$EXTERNALSYM VK_F9}
VK_F9 = 120;
{$EXTERNALSYM VK_F10}
VK_F10 = 121;
{$EXTERNALSYM VK_F11}
VK_F11 = 122;
{$EXTERNALSYM VK_F12}
VK_F12 = 123;
{$EXTERNALSYM VK_F13}
VK_F13 = 124;
{$EXTERNALSYM VK_F14}
VK_F14 = 125;
{$EXTERNALSYM VK_F15}
VK_F15 = 126;
{$EXTERNALSYM VK_F16}
VK_F16 = 127;
{$EXTERNALSYM VK_F17}
VK_F17 = 128;
{$EXTERNALSYM VK_F18}
VK_F18 = 129;
{$EXTERNALSYM VK_F19}
VK_F19 = 130;
{$EXTERNALSYM VK_F20}
VK_F20 = 131;
{$EXTERNALSYM VK_F21}
VK_F21 = 132;
{$EXTERNALSYM VK_F22}
VK_F22 = 133;
{$EXTERNALSYM VK_F23}
VK_F23 = 134;
{$EXTERNALSYM VK_F24}
VK_F24 = 135;
{$EXTERNALSYM VK_NUMLOCK}
VK_NUMLOCK = 144;
{$EXTERNALSYM VK_SCROLL}
VK_SCROLL = 145;
{ VK_L & VK_R - left and right Alt, Ctrl and Shift virtual keys.
Used only as parameters to GetAsyncKeyState() and GetKeyState().
No other API or message will distinguish left and right keys in this way. }
{$EXTERNALSYM VK_LSHIFT}
VK_LSHIFT = 160;
{$EXTERNALSYM VK_RSHIFT}
VK_RSHIFT = 161;
{$EXTERNALSYM VK_LCONTROL}
VK_LCONTROL = 162;
{$EXTERNALSYM VK_RCONTROL}
VK_RCONTROL = 163;
{$EXTERNALSYM VK_LMENU}
VK_LMENU = 164;
{$EXTERNALSYM VK_RMENU}
VK_RMENU = 165;
{$EXTERNALSYM VK_PROCESSKEY}
VK_PROCESSKEY = 229;
{$EXTERNALSYM VK_ATTN}
VK_ATTN = 246;
{$EXTERNALSYM VK_CRSEL}
VK_CRSEL = 247;
{$EXTERNALSYM VK_EXSEL}
VK_EXSEL = 248;
{$EXTERNALSYM VK_EREOF}
VK_EREOF = 249;
{$EXTERNALSYM VK_PLAY}
VK_PLAY = 250;
{$EXTERNALSYM VK_ZOOM}
VK_ZOOM = 251;
{$EXTERNALSYM VK_NONAME}
VK_NONAME = 252;
{$EXTERNALSYM VK_PA1}
VK_PA1 = 253;
{$EXTERNALSYM VK_OEM_CLEAR}
VK_OEM_CLEAR = 254;

:),其實不用記,你不是用delphi嗎,在ide裏面輸入vk_f1總會吧,然後按住ctrl鍵
單擊剛纔你輸入的vk_f1,就會出來啦!
至於key:char的值,就是key:word的ascII碼,你可以看chr(vk_f1),chr(vk_enter),都可以哈!

 

》》》》》》》》》》》》》》》》》》

 

delphi幫助裏的虛擬鍵值表:
vk_right right arrow key
vk_down down arrow key
vk_select select key
vk_print print key (keyboard-specific)
vk_execute execute key
vk_snapshot print screen key
vk_insert insert key
vk_delete delete key
vk_help help key

vk_lwin left windows key (microsoft keyboard)
vk_rwin right windows key (microsoft keyboard)
vk_apps applications key (microsoft keyboard)
vk_numpad0 0 key (numeric keypad)
vk_numpad1 1 key (numeric keypad)
vk_numpad2 2 key (numeric keypad)
vk_numpad3 3 key (numeric keypad)
vk_numpad4 4 key (numeric keypad)
vk_numpad5 5 key (numeric keypad)
vk_numpad6 6 key (numeric keypad)
vk_numpad7 7 key (numeric keypad)
vk_numpad8 8 key (numeric keypad)
vk_numpad9 9 key (numeric keypad)

vk_multiply multiply key (numeric keypad)
vk_add add key (numeric keypad)
vk_separator separator key (numeric keypad)
vk_subtract subtract key (numeric keypad)
vk_decimal decimal key (numeric keypad)
vk_divide divide key (numeric keypad)
vk_f1 f1 key
vk_f2 f2 key
vk_f3 f3 key
vk_f4 f4 key
vk_f5 f5 key
vk_f6 f6 key
vk_f7 f7 key
vk_f8 f8 key
vk_f9 f9 key
vk_f10 f10 key
vk_f11 f11 key
vk_f12 f12 key
vk_f13 f13 key
vk_f14 f14 key
vk_f15 f15 key

vk_f16 f16 key
vk_f17 f17 key
vk_f18 f18 key
vk_f19 f19 key
vk_f20 f20 key
vk_f21 f21 key
vk_f22 f22 key
vk_f23 f23 key
vk_f24 f24 key
vk_numlock num lock key
vk_scroll scroll lock key
vk_lshift left shift key (only used with getasynckeystate and getkeystate)
vk_rshift right shift key (only used with getasynckeystate and getkeystate)
vk_lcontrol left ctrl key (only used with getasynckeystate and getkeystate)
vk_rcontrol right ctrl key (only used with getasynckeystate and getkeystate)

vk_lmenu left alt key (only used with getasynckeystate and getkeystate)
vk_rmenu right alt key (only used with getasynckeystate and getkeystate)
vk_processkey process key
vk_attn attn key
vk_crsel crsel key
vk_exsel exsel key
vk_ereof erase eof key
vk_play play key
vk_zoom zoom key
vk_noname reserved for future use
vk_pa1 pa1 key
vk_oem_clear clear key

 

模擬鼠標

鼠標移動(移動量dx,dy)
mouse_event(MOUSEEVENTF_MOVE,dx,dy,0, 0 );
鼠標在(x,y)處按下或釋放
setcursorpos(x,y);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 );
mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0 );
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 );
mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 );
鼠標雙擊由兩次按下與釋放來模擬

鍵盤模擬

一般虛擬鍵值(VK_)由KeyDown或keyup事件得到
特殊鍵值
Tab--9
Shift--16
Ctrl--17
Alt--18
CapsLock--20
Esc--27
Win--91,92
NumLock--144
ScrollLock--145

按下鍵
keybd_event(key, MapVirtualKey(key, 0 ), KEYEVENTF_KEYUP , 0 );
釋放鍵
keybd_event(key, MapVirtualKey(key, 0 ), 0 , 0 );
以上做法對大多數鍵有效,少數鍵要用到不同的值

 

》》》》》》》》》》》》》》》》》》》》》》》》》

 

常數名稱      十六進制值     十進制值     對應按鍵
VK_LBUTTON          01          1        鼠標的左鍵
VK_RBUTTON          02          2        鼠標的右鍵
VK-CANCEL           03          3        Ctrl+Break(通常不需要處理)
VK_MBUTTON          04          4        鼠標的中鍵(三按鍵鼠標)
VK_BACK             08 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章