| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Hot Keys |
| Автор: Kirgston 21.2.2009, 10:23 |
| Всем доброго времени суток! Вот собственно возник такой вопросик... я хочу написать программу так чтобы пользователь мог изменять горячие клавиши во время программы. Как поменять на конкретную клавишу я знаю... а вот как сделать чтобы пользователь сам мог выбрать что его душе угодно? Например есть окошко Едит. Он нажал контрол + О и в окошке вывелось Ctr + O и оно сразу зарегистрировало клавишу... вопросик в том как? =) Как мне узнать что щас ввел юзер? И как я смогу узнать мол... что он щас зажал Контрол и О ? Были идеи с перебором ... мол записать все коды клавиш в скажем AnsiString s[20] а потом сделать перебор... через цыкл фор... ребята я на правильном пути? Заранее очень благодарен! |
| Автор: THandle 21.2.2009, 16:08 |
| Kirgston, может тебе лучше THotKey использовать? |
| Автор: Kirgston 21.2.2009, 23:00 |
| Блин |
| Автор: THandle 22.2.2009, 11:37 |
| Да хотя бы вот: http://articles.org.ru/cn/showdetail.php?cid=7059 И вообще гугл. Можно найти. Да и в справке ж все есть. И исходников у THotKey не много... Можно посмотреть |
| Автор: Kirgston 22.2.2009, 11:46 | ||
Что то я очень сильно туплю... извините но...
это я написал в Он Чендж Хоткея... Ну и само собой... unsigned short key1; TShiftState st; Также на форме у меня висит ApplicationEvents там в Месаджах есть обработчик. Мол что надо делать когда нажали... Вроде разницы то нету на сколько я понимаю. Делать через void __fastcall wm_hotkey(TWMHotKey&); Или АпликейшенЭвентс. Т.к. регистрация кнопок идет одна... значит и вызов тот же =) Но вот ... при нажатии ничего... тоисть вообще ничего... никакой реакции... также я бы хотел осуществить "запоминание" данных кнопок... но я не знаю как я могу (в каком как бы классе отобразить... интежер или стринг...) отобразить TShiftState ... также я не знаю как можно отобразить ееее данную зарегистрированную кнопку в как бы текст окна ХотКея... просто у меня какая то не совместимость Борланда с виндой... ну он просто не отображает все возможности... то есть подсказки... в ХотКее он отображает всего 3 вида... Align , AutoSize, Anchors ... а бывает такое что вообще ничего не видно... |
| Автор: THandle 22.2.2009, 11:54 |
Как объявлено? Начальное значение присваиваешь? А то там может мусор оказаться. Выложи тестовый проект что ли... |
| Автор: Djinn 22.2.2009, 13:16 |
| http://forum.vingrad.ru/index.php?showtopic=219900&view=findpost&p=1612976 тема подобная и пример программы по работе с Thotkey |
| Автор: Kirgston 22.2.2009, 13:19 |
| Вот сделал...ну обявлено как unsigned short так требует ShortCutToKey я так и сделал =) Нет я не присваивал. Читал в книге мол это за меня делает компилятор в честь того что мол может быть мусор и потому если ничего не задать то компилятор присвоит переменной 0 |
| Автор: Kirgston 22.2.2009, 14:07 |
| Извините ребята просто страничка ... криво обновляется... бывает такое что посты просто не вижу =) уже разобрался и добил.... =) остается вопрос =) а нету там ничего на подобии текста окна? Просто я если ставлю разрешение на все модификаторы то оно мне выдает такое.... уууу Ctr+Shift+Alt + key а когда я снимаю это оно уже перестает работать... |
| Автор: THandle 22.2.2009, 14:32 | ||
Kirgston, ничего не понял... но попробую угадать...
Кстати, что разрегистрировать будешь при первом нажатии на кнопку? |
| Автор: Kirgston 22.2.2009, 15:14 |
| Ладненько щас буду пробовать исправить ;) а разрегистрировать надо ;) ибо может быть ошибка когда я зарегистрирую кнопку а она уже там была до этого. Потому в целях безопасности лучше удалить старую кнопку и поставить новую =) |
| Автор: Kirgston 22.2.2009, 16:31 |
| Ребята большое спасибо =) а есть какая нибудь возможность сохранения кнопок? Чтобы я например перезашел в программу и параметры и кнопки остались? Пробовал с реестром... что то не выходит... |
| Автор: THandle 22.2.2009, 16:57 |
Это то понятно, что разрегистрировать надо. Но что при первом нажатии на конопку будет, когда еще ничекго не зарегистрировано? Kirgston, почему с реестром ничего не вышло? Можно сделать флаг по типу mod1, только or'ом добавлять туда еще последнюю кнопку(с буквой которая) и писать все это как REG_DWORD. |
| Автор: Kirgston 22.2.2009, 21:24 |
| Ну... что это за программа в которой надо во время работы регистрировать кнопки =) само собой что они с самого старта регистрируются =) так что там проблем нету ;) Дело в том... что возникло 2 проблемы 1) это в том что я не знаю как записывать переменную TShiftState ... как Строка или как число... ну да ладно это можно и "угадать" хотя предполагаю что лучше будет писать\читать как строку. 2) дело в том что я не знаю как отобразить сие чудо. То есть я не знаю как сделать так чтобы при чтении из реестра программно изменять по получены данным HotKey1->HotKey . Извините что столько тупых вопросов ставлю... просто у меня С++ не совместим с виндой... при работе я не вижу "помощи" при скажем набирании Form1-> . У меня ничего не всплывает, а если появится что то то там будет 1-2 функции. И иследовать С++ я не могу :( и чтобы что то сделать мне просто надо знать конкретно что надо писать :( |
| Автор: THandle 22.2.2009, 22:56 | ||||||
Ну я тупой...
Запись:
Чтение:
Хотя можно писать и WriteInteger'ом - TShortCut двухбайтовое число. |
| Автор: Kirgston 23.2.2009, 14:28 |
| Спасибо вам большое! Всё работает как надо! =) Но вот наверное последний вопросик... ещё с Делфи помню что читал книгу Фленова... там он сказал что при работе с реестром надо в конце ставить Reg.Free; В С++ Reg->Free(); Это якобы закроет реестр и удалит с памяти переменную. Щас я у вас увидел delete Reg . А что она делает? Какие различия между Free & Delete? |
| Автор: THandle 23.2.2009, 14:52 |
| Kirgston, товарища Фленова фтопку вместе с его книжками... Что Free, что Delete освобождают память за объектом. |
| Автор: Kirgston 23.2.2009, 15:35 |
| Спасибо! Учту =) |