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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2013, 13:20   #1
Host-2013
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 63
По умолчанию функция перевода названий клавиш в #x формат

во 1 сразу такой вопрос: надо чтобы в одном столбце StringGrid при щелчке по ячейке вызывалось что то вроде события: можно было бы нажать какую либо клавишу и ее название (не код!) записалось в ячейку, например нажал Enter в ячейку записалось Enter (не #13)
и во 2 нужна какая то функция способная такие названия конвертировать в #x формат

помогите пожалуйста !
Host-2013 вне форума Ответить с цитированием
Старый 12.02.2013, 13:33   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,759
По умолчанию

Что-то никогда такого не видел. Есть конечно VK_ но это не то. Скорее всего придётся писать самому такую функцию.
FaTaL вне форума Ответить с цитированием
Старый 12.02.2013, 13:38   #3
Host-2013
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 63
По умолчанию

Цитата:
Сообщение от FaTaL Посмотреть сообщение
Что-то никогда такого не видел. Есть конечно VK_ но это не то. Скорее всего придётся писать самому такую функцию.
что не видел? коды клавиш в десятичном формате?
а функцию не против написать как бы... просто нельзя ли как то ее сократить? ну чтобы не по каждой клавише отдельно описывать какому коду она равна...
Host-2013 вне форума Ответить с цитированием
Старый 12.02.2013, 13:56   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

ИМХО нельзя. А еще заморочка - некоторые клавиши описываются двумя кодами. Например если не ошибаюсь NumLock клавиатура.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.02.2013, 14:10   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Для одиночных нажатий работает
Код:
function NameKey(Key: Cardinal): string;
var xCode: Cardinal;
    c: array[0..255] of Char;
begin
  xCode:=MapVirtualKey(Key,0) shl 16;
  case Key of
  19:     xCode:=3225747457;
  34..46: xCode:=xCode or (1 shl 24);
  144:    xCode:=3242524673;
  end;
  if xCode>0 then begin
    GetKeyNameText(xCode,c,SizeOf(c));
    Result:=c;
  end
  else Result:='';
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  Label1.Caption:=NameKey(Key);
end;
KeyPreview в True на форме не забыть
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.02.2013, 15:40   #6
Host-2013
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 63
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Для одиночных нажатий работает
Код:
function NameKey(Key: Cardinal): string;
var xCode: Cardinal;
    c: array[0..255] of Char;
begin
  xCode:=MapVirtualKey(Key,0) shl 16;
  case Key of
  19:     xCode:=3225747457;
  34..46: xCode:=xCode or (1 shl 24);
  144:    xCode:=3242524673;
  end;
  if xCode>0 then begin
    GetKeyNameText(xCode,c,SizeOf(c));
    Result:=c;
  end
  else Result:='';
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  Label1.Caption:=NameKey(Key);
end;
KeyPreview в True на форме не забыть
как бы мне не надо переводить Cardinal в String мне наоборот надо... читай внимательнее
Host-2013 вне форума Ответить с цитированием
Старый 12.02.2013, 15:47   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
как бы мне не надо переводить Cardinal в String мне наоборот надо... читай внимательнее
Цитата:
и ее название (не код!) записалось в ячейку, например нажал Enter в ячейку записалось Enter
Тогда русский подучить нужно для правильного изложения мыслей
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.02.2013, 16:06   #8
Host-2013
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 63
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Тогда русский подучить нужно для правильного изложения мыслей
Цитата:
Сообщение от Host-2013 Посмотреть сообщение
нужна какая то функция способная такие названия конвертировать в #x формат
я имел ввиду это... впрочем теперь допер что твоя функция мне тоже пригодится спасибо
Host-2013 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объясните как работает эта функция перевода из десятичной в восмеричную систему? severest Помощь студентам 1 02.07.2012 05:57
Функция перехвата клавиш Sylar9 Общие вопросы C/C++ 2 19.05.2012 19:31
функция перехвата нажатий клавиш wwe2012 Общие вопросы C/C++ 11 30.03.2011 11:41
статья - Функция GetKeyboardState копирует состояние 256 виртуальных клавиш в заданный буфер. Pblog Обсуждение статей 0 23.06.2010 05:13
Как правильно указать ссылку формат ячейки чтобы функция работала? Brucebelg Microsoft Office Excel 7 21.05.2010 10:19