Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2007, 22:22   #1
frai
Пользователь
 
Регистрация: 11.04.2007
Сообщений: 36
По умолчанию Помогите разобраться с процедурой OnKeyDown!!!

Скажите пожалуйста, можно ли в процедуре OnKeyDown описать символьные клавишы, к примеру A,D. И вообще где можно найти коды к символьным клавишам?
frai вне форума Ответить с цитированием
Старый 11.04.2007, 23:27   #2
RSLoader
_________
Пользователь
 
Аватар для RSLoader
 
Регистрация: 27.03.2007
Сообщений: 69
По умолчанию

Если тебя интересуют виртуальные коды, то найти их описание можно в модуле Windows. Но там придётся поморочиться с регистром и раскладкой, поэтому лучше воспользуйся этой функцией из проги (по-моему, zetrix-a) KeyHook:
Код:
function GetCharFromVKey(VKey:Word):String;
var
  KeyState:TKeyboardState;
  RetCode:Integer;
begin
  Win32Check(GetKeyboardState(KeyState));
  SetLength(Result,2);
  RetCode:=ToAscii(VKey,MapVirtualKey(VKey,0),KeyState,@Result[1],0);
  case retcode of
       1:SetLength(Result,1);
       2:
       else Result:='';
  end;
end;
RSLoader вне форума Ответить с цитированием
Старый 12.04.2007, 00:26   #3
frai
Пользователь
 
Регистрация: 11.04.2007
Сообщений: 36
По умолчанию

Прости, я пока что не очень еще силен в Delphi. Поясни пожалуйста как мне использоваться данную ф-цию в моем случае. В общем мне надо следущее:

procedure TForm1.BitBtn1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = VK_left then showmessage('работает1');
if key = VK_right then showmessage('работает2');

end;

Я хочу что бы вместо клавишь влево и вправо(стрелок) у меня были задействованы символьные клавишы.
frai вне форума Ответить с цитированием
Старый 12.04.2007, 02:54   #4
RSLoader
_________
Пользователь
 
Аватар для RSLoader
 
Регистрация: 27.03.2007
Сообщений: 69
По умолчанию

Код:
procedure TForm1.BitBtn1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  ch:String;
begin
  ch:=GetCharFromVKey(Key);
  if ch = 'r' then showmessage('работает1');
  if ch = 's' then showmessage('работает2');
end;
RSLoader вне форума Ответить с цитированием
Старый 12.04.2007, 10:37   #5
Voland
Heavy metal
Пользователь
 
Аватар для Voland
 
Регистрация: 02.04.2007
Сообщений: 42
По умолчанию

А так не проще?
Код:
procedure TForm1.BitBtn1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
  if key = Ord('A') then showmessage('работает1');
  if key = Ord('D') then showmessage('работает2');
end;
Voland вне форума Ответить с цитированием
Старый 12.04.2007, 11:44   #6
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

хронология постов тут - от сложного к простому
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 12.04.2007, 13:49   #7
frai
Пользователь
 
Регистрация: 11.04.2007
Сообщений: 36
По умолчанию

СПАСИБО ВСЕМ ОГРОМНОЕ!!!)))
frai вне форума Ответить с цитированием
Старый 12.04.2007, 14:30   #8
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Цитата:
procedure TForm1.BitBtn1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = Ord('A') then showmessage('работает1');
if key = Ord('D') then showmessage('работает2');
end;
нет, не проще, т.к. обратите внимание, что key у нас типа WORD, т.е. Unicode, а не ASCII. И наше счастье, что ASCII и Unicode совпадает для английских букв!

(ORD возвращает ASCII код символа, а у нас Юникод)

Последний раз редактировалось zetrix; 12.04.2007 в 14:33.
zetrix вне форума Ответить с цитированием
Старый 13.04.2007, 12:35   #9
Voland
Heavy metal
Пользователь
 
Аватар для Voland
 
Регистрация: 02.04.2007
Сообщений: 42
По умолчанию

Параметр Key в обработчике OnKeyDown - это не ASCII или Unicode символ, а Virtual-Key code. Он НЕ ЗАВИСИТ ни от раскладки клавиатуры, ни от состояния клавиши Shift.
А Ord('<заглавная английская буква>') - это просто метод получения Virtual-Key code для определённой символьной клавиши. Компилятор просто поставит вместо Ord('A') константу. Почитай справку Дельфи по теме "Virtual Key Codes".
Voland вне форума Ответить с цитированием
Старый 13.04.2007, 15:46   #10
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Что-то я с чем-то перепутал... Спасибо
zetrix вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помощь в событии onkeydown Titan123 Общие вопросы Delphi 2 11.08.2008 17:26
KOL onkeydown формы Simply-Art Помощь студентам 2 29.07.2008 17:22
Люди,помогите с процедурой на выход! Alexij Общие вопросы Delphi 5 08.06.2008 13:43
Помогите с процедурой... Arkuz Помощь студентам 10 15.05.2008 08:56
помогите с процедурой на VBA Exo Microsoft Office Excel 2 06.05.2008 10:53