Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];

Вниз

Коды клавиш.   Найти похожие ветки 

 
Alral ©   (2006-08-17 21:32) [0]

На сколько мне известно, у клавиш как пробел, enter и т.п., а так же вроде и у букв в Delphi есть коды(#n, n-номер). Где их можно найти. Меня в данном случае интересует пробел(как можно определить  
нажатие пробела например в OnKeyPress if Key=#код нажатия на пробел then...), но хорошо бы и знать другие коды. Где их можно найти?


 
Джо ©   (2006-08-17 21:37) [1]

> Где их можно найти?

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


 
Virgo_Style ©   (2006-08-17 21:37) [2]

зачем номер? Хотя... если нужен, то так: ord(" ");
тогда проверка будет выглядеть как if ...=chr( ord(" "));, но мы ведь трудностей не боимся? ;-)))


 
Alral ©   (2006-08-17 21:42) [3]

Net, ja imeju vvidu, naprimer, nazhat enter, ja ze ne napishu v OnKeyPress "if key=Enter then...", eto zhe budet Undeclared identifier, a kak togda, vo chto ja imeju vvidu.


 
Virgo_Style ©   (2006-08-17 21:45) [4]

Alral ©   (17.08.06 21:42) [3]
см. VK_ - константы. afair, для Enter - VK_RETURN.
ну и [1].


 
Джо ©   (2006-08-17 21:51) [5]

> [3] Alral ©   (17.08.06 21:42)
> Net, ja imeju vvidu, naprimer, nazhat enter, ja ze ne napishu
> v OnKeyPress "if key=Enter then...", eto zhe budet Undeclared
> identifier, a kak togda, vo chto ja imeju vvidu.

Код, приведенный в посте [1] и предназначен для того, чтобы узнать искомый код нажимаемой клавиши.


 
Галинка ©   (2006-08-17 23:25) [6]

А как сеняются коды клавишь, когда они нажимаются вместе с шифтом или контролом или альтом?


 
Джо ©   (2006-08-17 23:40) [7]

> [6] Галинка ©   (17.08.06 23:25)
> А как сеняются

А что это? :)


 
Галинка ©   (2006-08-17 23:50) [8]

Извините, меняются конечно )))


 
Virgo_Style ©   (2006-08-17 23:50) [9]

Галинка ©   (17.08.06 23:25) [6]

в OnKeyPress для Shift (и CapsLock) цифр и символов действует принцип "что вы видите, то вы и получите".
Для остальных... Хм. Еще раз - см. [1].


 
Virgo_Style ©   (2006-08-17 23:52) [10]


> для Shift (и CapsLock) цифр и символов


для Shift (и CapsLock) при нажатии клавиш, соответствующих цифрам и символам


 
Alral ©   (2006-08-18 00:10) [11]

Spasibo


 
ffo ©   (2006-08-20 19:51) [12]


>  Коды клавиш

case Key of
   VK_CANCEL: tempstr := "CANCEL";
   VK_BACK: tempstr := "BACKSPACE";
   VK_TAB: tempstr := "TAB";
   VK_CLEAR: tempstr := "CLEAR";
   VK_RETURN: tempstr := "ENTER";
   VK_PAUSE: tempstr := "PAUSE";
   VK_CAPITAL: tempstr := "CAPS LOCK";
   VK_ESCAPE: tempstr := "ESC";
   VK_SPACE: tempstr := "SPACEBAR";
   VK_PRIOR: tempstr := "PAGE UP";
   VK_NEXT: tempstr := "PAGE DOWN";
   VK_END: tempstr := "END";
   VK_HOME: tempstr := "HOME";
   VK_LEFT: tempstr := "LEFT ARROW";
   VK_UP: tempstr := "UP ARROW";
   VK_RIGHT: tempstr := "RIGHT ARROW";
   VK_DOWN: tempstr := "DOWN ARROW";
   VK_SELECT: tempstr := "SELECT";
   VK_EXECUTE: tempstr := "EXECUTE";
   VK_SNAPSHOT: tempstr := "PRINT SCREEN";
   VK_INSERT: tempstr := "INS";
   VK_DELETE: tempstr := "DEL";
   VK_HELP: tempstr := "HELP";

   {VK_1..VK_0 and VK_A..VK_Z are not defined so you have to use the Ord()
   function instead which yields the equivilent VK code}


 
Галинка ©   (2006-08-21 01:51) [13]

Еще раз... Что я должна видеть? Ну, например, набираю я шоткат Alt+E (обычно выход из программы). Какой код будет сгененрирован?


 
Gydvin ©   (2006-08-21 07:11) [14]

>  вместе с шифтом или контролом или альтом?


if (ssCtrl in Shift) and (key=...........) then...........


 
DprYg ©   (2006-08-21 09:43) [15]

Вот просто немного для справки. Может быть, поможет кому-нибудь разобраться. В OnKeyDown можно распознать нажатые клавиши(вкл. функциональные и кнопки мыши), но нельзя распознать символ. В OnKeyPress можно распознать нажатую клавишу символа, сам символ, но нельзя функциональные клавиши. Shift+символ - OnKeyPress наступает и все ок. Alt+символ - OnKeyPress не наступает. Ctrl+символ - OnKeyPress наступает, но указывает на неверный символ.


 
Галинка ©   (2006-08-21 12:31) [16]

Короче... бардак... а как сама среда их распознает? Может поэтому их внешне и нельзя распознать, чтобы особо умные не переопределяли?


 
novill ©   (2006-08-21 12:57) [17]

Никакого бардака.
В keydown"е код нажатой клавише, в keypress"е символ, если конечно это символ.

Символ зависит еще и от текущего языка, статуса shift и capslock. Естесственно его не может быть в keydown.


 
Gydvin ©   (2006-08-21 13:55) [18]

в [14] показано, как уотловить нажатие клавиши вместе с контролом


 
Галинка ©   (2006-08-21 17:30) [19]

С контролом понятно. А с альтом?


 
Gydvin ©   (2006-08-21 17:49) [20]


> С контролом понятно. А с альтом?

мдя


 
clickmaker ©   (2006-08-21 17:52) [21]


> С контролом понятно. А с альтом?

c альтом - это к музыкантам


 
Gydvin ©   (2006-08-21 17:57) [22]

ssAlt

ЗЫ. Как здесь любят говорить "Я плякал"


 
Галинка ©   (2006-08-21 18:09) [23]

Разобралась вроде. С контролом или альтом отлавливается код заглавной буквы латинского алфавита. Вне зависимости от выбранной раскладки клавиатуры. Т.е. это первый ASCII код, относящийся к нажатой клавише.

А как поймать нажатие функциональных клавишь F1-F12?


 
Галинка ©   (2006-08-21 18:17) [24]

Ну звыняйте... Я уже два года с Дельфи не работала... Я вообще два года уже не работаю... Навыки однако теряются...


 
clickmaker ©   (2006-08-21 18:30) [25]


> А как поймать нажатие функциональных клавишь F1-F12?

для проги нажатие Ф ничем не отличается от нажатия ентер


 
Gydvin ©   (2006-08-21 18:30) [26]

procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
showmessage(inttostr(key));
end;


©

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;


© Windows.pas


 
Alral ©   (2006-08-22 20:21) [27]

Ne ponjal...

if (ssCtrl in Shift) and (key=...........) then...........

V Form1KeyPress:

Undeclared identifier "Shift".

v Form1KeyDown

Incompactible types.


 
Leonid Troyanovsky ©   (2006-08-22 20:32) [28]


> Alral ©   (22.08.06 20:21) [27]

> V Form1KeyPress:

> Undeclared identifier "Shift".


А причем тут OnKeyPress?
В оном есть только WM_CHAR.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2006-08-22 20:39) [29]


> Alral ©   (22.08.06 20:21) [27]

> v Form1KeyDown

> Incompactible types.


Видимо, в этом (key=...........)  оно и есть.

--
Regards, LVT.


 
Alral ©   (2006-08-22 20:43) [30]

Da, v etom, a kakoi simvol dolzhen bit? Naprimer dlja T?


 
Leonid Troyanovsky ©   (2006-08-22 20:45) [31]


> Alral ©   (22.08.06 20:43) [30]

> Da, v etom, a kakoi simvol dolzhen bit? Naprimer dlja T?


В "этом" это в чем? key = "T" ?

--
Regards, LVT.


 
DprYg ©   (2006-08-22 20:55) [32]

if (ssCtrl in Shift) and ((Key = Ord("T")) then...


 
Ketmar ©   (2006-08-22 20:56) [33]

> [16] Галинка ©   (21.08.06 12:31)
это где там "бардак"? это не "бардак", это незнание основ трансляции VK в коды символов. в частности того, что Alt+<что-то> не посылает сообщения WM_CHAR. оно посылает WM_SYSCHAR. следовательно, OnKeyPress() и не обязана на это реагировать.


 
Leonid Troyanovsky ©   (2006-08-22 21:06) [34]


> DprYg ©   (22.08.06 20:55) [32]

> if (ssCtrl in Shift) and ((Key = Ord("T")) then...


Да, конечно, Ord.
Sorry.

--
Regards, LVT.


 
Галинка ©   (2006-08-22 22:59) [35]

Ketmar ©   (22.08.06 20:56) [33]

я уже в принципе разобралась, что не бардак. Я не разобралась пока только, как отловить, например, Ctrl+F2, ну т.е. альта/контрола с функциональными клавишами.


 
Ketmar ©   (2006-08-22 23:12) [36]

> [35] Галинка ©   (22.08.06 22:59)
RegisterHotKey() не пойдёт?


 
Ketmar ©   (2006-08-22 23:13) [37]

да, извиняюсь. конечно же, после alt+<что-то> водникают UP и DOWN, который потом TranslateMessage() обарбатывает. %-)


 
Ketmar ©   (2006-08-22 23:14) [38]

тьфу. DOWN и UP. %-)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.039 c
1-1153915757
DelphiLexx
2006-07-26 16:09
2006.09.10
Скопировать один TreeView в другой


15-1155559772
rimm
2006-08-14 16:49
2006.09.10
Потоки и поточные преложения...


15-1155849254
ronyn
2006-08-18 01:14
2006.09.10
Окно выбора пользователя


15-1155715787
Furyz
2006-08-16 12:09
2006.09.10
Борьба со спамом


2-1155871671
apic
2006-08-18 07:27
2006.09.10
Подключение к инету...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский