Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: как преобразовать AnsiString в код клавиши Win  (Прочитано 14616 раз)
0 Пользователей и 1 Гость смотрят эту тему.
oktonion
Постоялец

ru
Offline Offline

« : 10-11-2010 20:57 » 

Суть проблемы такова:
Есть несколько AnsiSting, типа
Код:
AnsiString f1="VK_F1";
AnsiString a="VK_A";
Как их преобразовать просто к int, чтобы затем можно было передовать в ф-ии типа GetAsyncKeyState.
Долго мудрил я с разными типами, но
Код:
AnsiString key_name="VK_F1";
int key;
key=key_name.ToInt();
вылетает естесвенно с ошибкой, что дескать "VK_F1" не является int.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 11-11-2010 04:31 » 

Улыбнуло (с)

Например, сделай табличку соответствия строк кодам.
Коды найдешь в winuser.h
« Последнее редактирование: 11-11-2010 04:39 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
oktonion
Постоялец

ru
Offline Offline

« Ответ #2 : 11-11-2010 11:42 » 

 Улыбаюсь
А меня как-то не улыбает прописывать таблицу в сто с лишним элементов.
Не уж то никак не перевести
Код:
AnsiString ans_key="VK_F1";
к виду
Код:
int int_key=VK_F1;
?
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #3 : 11-11-2010 12:16 » 

oktonion, зачем прописывать вручную-то?? #include "winuser.h" и все!
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 11-11-2010 12:22 » 

oktonion, если тебе нужно соответствие. А если не нужно, так не делай. Вариантов не много.

Надо исходить из задачи - зачем это нужно?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #5 : 11-11-2010 12:43 » 

oktonion, зачем прописывать вручную-то?? #include "winuser.h" и все!

Только в данном случае не поможет. У него строка, так что либо таблицу, либо парсер. Ага Среди богатства выбора, другой альтернативы нет.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #6 : 11-11-2010 12:46 » 

Джон, аааааа.... понял.. сорри..
Но тут, действительно, нужно понять почему именно так нужно - может альтернатива-то и есть?
Offtopic:

- Доктор, когда я делаю так, то у меня болит вот тут!
- Не делайте так!
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 11-11-2010 12:46 » 

А меня как-то не улыбает прописывать таблицу в сто с лишним элементов.

oktonion, а кстати, откуда столько "набежало"?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #8 : 11-11-2010 12:49 » 

baldr, нууу дык. Пока дано только:

Код:
AnsiString ans_key="VK_F1";

Конечно, напрашивается вопрос, а кто создаёт эти самые строчки? Наверняка тоже по таблице.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
oktonion
Постоялец

ru
Offline Offline

« Ответ #9 : 11-11-2010 15:07 » 

Не думал что это вызовет столько трудностей Улыбаюсь

Есть виртуальная клавиатура.Клавиши ее - это TBitBtn.Соответственно у каждой клавиши есть свой Caption, который представляет из себя строку AnsiString.Я хотел сделать что то на подобие
Код:
int AnsToKey ( AnsiString key_name )
{
 int key;

 key_name = "VK_" + key_name;
 key = key_name.ToInt();
 return key;
}
чтобы потом вызывать эту ф-ю к примеру
Код:
if ( GetAsyncKeyState( AnsToKey(Form1->BitBtn1->Caption) ) )
  {
    //some fun
  }
Извините если где с кодом напутал, писал без компилятора

Конечно ToInt() ругается, так как не видет цифр, и как получить на выходе key=VK_*Имя клавиши* - вот в этом у меня загвоздка.Если есть более рациональные решения данной задачи, чем забивать соответствия типа "VK_F1" : VK_F1 - было бы замечательно.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 11-11-2010 20:03 » new

oktonion, опираться на Caption - дурная практика!
У кнопок есть свойство Tag - произвольное целое число.

Твои аргументы очень похожи на обычную лень. Всего то нужно потратить с пол часа времени. Рекомендую устанавливать в Tag коды не через GUI-интерфейс, а непосредственно в dfm-файле - он текстовый.
« Последнее редактирование: 11-11-2010 20:11 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
oktonion
Постоялец

ru
Offline Offline

« Ответ #11 : 11-11-2010 21:10 » 

RXL, лень - двигатель прогресса  Улыбаюсь
Про Tag я знаю, просто думал что то сделать с Caption, так как по сути что в Tag загонять коды клавишь, что в массив, всеравно придется делать одну и ту же работу дважды.Да и просто было интересно есть ли решение такой задачи.
Спасибо.
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #12 : 12-11-2010 04:51 » 

Тебе нужно или в кнопках прописывать коды или строить таблицу соотвествия
VK_F1 это макро определение (хотя может и просто переменная типа int надо хедеры смотреть), но вычисляется препроцессором соотвествено уже на этапе компиляции эта хрень просто число
Ты пытаешь проивольную строку превратить в число, если бы у тебя в строке лежало "100" или "15", то это бы еще как-то работало, но ты бы получил int = 100, но ни как не значение из макроса
парой макросов и одним классом можно легко построить таблицу соотвествия, хотя конечно выдёргивать данные из Caption это полная хрень, захочется тебе изменить Caption и что ты будешь тогда делать?
Имхо идеальный вариант прописать значение в tag
Записан

Странно всё это....
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 30-11-2010 13:56 » 

Попалось на глаза - перевод текста в машиноваримое представление: сперва TextToShortCut(), а потом ShortCutToKey().
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines