oktonion
Постоялец
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
|
|
« Ответ #1 : 11-11-2010 04:31 » |
|
Улыбнуло (с)
Например, сделай табличку соответствия строк кодам. Коды найдешь в winuser.h
|
|
« Последнее редактирование: 11-11-2010 04:39 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
oktonion
Постоялец
Offline
|
|
« Ответ #2 : 11-11-2010 11:42 » |
|
А меня как-то не улыбает прописывать таблицу в сто с лишним элементов. Не уж то никак не перевести AnsiString ans_key="VK_F1"; к виду int int_key=VK_F1; ?
|
|
|
Записан
|
|
|
|
baldr
|
|
« Ответ #3 : 11-11-2010 12:16 » |
|
oktonion, зачем прописывать вручную-то?? #include "winuser.h" и все!
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
RXL
|
|
« Ответ #4 : 11-11-2010 12:22 » |
|
oktonion, если тебе нужно соответствие. А если не нужно, так не делай. Вариантов не много.
Надо исходить из задачи - зачем это нужно?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Джон
просто
Администратор
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
|
|
« Ответ #6 : 11-11-2010 12:46 » |
|
Джон, аааааа.... понял.. сорри.. Но тут, действительно, нужно понять почему именно так нужно - может альтернатива-то и есть? Offtopic: - Доктор, когда я делаю так, то у меня болит вот тут! - Не делайте так!
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
Джон
просто
Администратор
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."
|
|
|
Джон
просто
Администратор
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
Постоялец
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
|
|
« Ответ #10 : 11-11-2010 20:03 » |
|
oktonion, опираться на Caption - дурная практика! У кнопок есть свойство Tag - произвольное целое число.
Твои аргументы очень похожи на обычную лень. Всего то нужно потратить с пол часа времени. Рекомендую устанавливать в Tag коды не через GUI-интерфейс, а непосредственно в dfm-файле - он текстовый.
|
|
« Последнее редактирование: 11-11-2010 20:11 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
oktonion
Постоялец
Offline
|
|
« Ответ #11 : 11-11-2010 21:10 » |
|
RXL, лень - двигатель прогресса Про Tag я знаю, просто думал что то сделать с Caption, так как по сути что в Tag загонять коды клавишь, что в массив, всеравно придется делать одну и ту же работу дважды.Да и просто было интересно есть ли решение такой задачи. Спасибо.
|
|
|
Записан
|
|
|
|
Антон (LogRus)
|
|
« Ответ #12 : 12-11-2010 04:51 » |
|
Тебе нужно или в кнопках прописывать коды или строить таблицу соотвествия VK_F1 это макро определение (хотя может и просто переменная типа int надо хедеры смотреть), но вычисляется препроцессором соотвествено уже на этапе компиляции эта хрень просто число Ты пытаешь проивольную строку превратить в число, если бы у тебя в строке лежало "100" или "15", то это бы еще как-то работало, но ты бы получил int = 100, но ни как не значение из макроса парой макросов и одним классом можно легко построить таблицу соотвествия, хотя конечно выдёргивать данные из Caption это полная хрень, захочется тебе изменить Caption и что ты будешь тогда делать? Имхо идеальный вариант прописать значение в tag
|
|
|
Записан
|
Странно всё это....
|
|
|
RXL
|
|
« Ответ #13 : 30-11-2010 13:56 » |
|
Попалось на глаза - перевод текста в машиноваримое представление: сперва TextToShortCut(), а потом ShortCutToKey().
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
|