Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hot Keys 
:(
    Опции темы
Kirgston
Дата 21.2.2009, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Всем доброго времени суток! Вот собственно возник такой вопросик... я хочу написать программу так чтобы пользователь мог изменять горячие клавиши во время программы. Как поменять на конкретную клавишу я знаю... а вот как сделать чтобы пользователь сам мог выбрать что его душе угодно? Например есть окошко Едит. Он нажал контрол + О и в окошке вывелось Ctr + O и оно сразу зарегистрировало клавишу... вопросик в том как? =) Как мне узнать что щас ввел юзер? И как я смогу узнать мол... что он щас зажал Контрол и О ? Были идеи с перебором ... мол записать все коды клавиш в скажем AnsiString s[20] а потом сделать перебор... через цыкл фор... ребята я на правильном пути? Заранее очень благодарен!
PM MAIL   Вверх
THandle
Дата 21.2.2009, 16:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 25
Всего: 372



Kirgston, может тебе лучше THotKey использовать?
PM   Вверх
Kirgston
Дата 21.2.2009, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Блин  smile я просто даже не знаю как с ним работать... смотрел через поиск ... мне ничего толкового не выдало... разве что примеры работы... смотрел по книгам тоже ничего :( вообще нету этого :( мне бы просто азы узнать... что это такое и с чем его надо кушать smile
PM MAIL   Вверх
THandle
Дата 22.2.2009, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 25
Всего: 372



Да хотя бы вот:
http://articles.org.ru/cn/showdetail.php?cid=7059

И вообще гугл. Можно найти. Да и в справке ж все есть. И исходников у THotKey не много... Можно посмотреть smile

PM   Вверх
Kirgston
Дата 22.2.2009, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Что то я очень сильно туплю... извините но...


Код

    UnregisterHotKey(Handle, 0xA000);
    ShortCutToKey(HotKey1->HotKey, key1, st);
    if(st.Contains(ssShift)) mod1 |= MOD_SHIFT;
    if(st.Contains(ssCtrl)) mod1 |= MOD_CONTROL;
    if(st.Contains(ssAlt)) mod1 |= MOD_ALT;
    RegisterHotKey(Handle, 0xA000, mod1, key1);


это я написал в Он Чендж Хоткея... 

Ну и само собой...
unsigned short key1;
TShiftState st;

Также на форме у меня висит ApplicationEvents там в Месаджах есть обработчик. Мол что надо делать когда нажали... Вроде разницы то нету на сколько я понимаю. 
Делать через
void __fastcall wm_hotkey(TWMHotKey&);

Или АпликейшенЭвентс. Т.к. регистрация кнопок идет одна... значит и вызов тот же =)

Но вот ... при нажатии ничего... тоисть вообще ничего...  никакой реакции... также я бы хотел осуществить "запоминание" данных кнопок... но я не знаю как я могу (в каком как бы классе отобразить... интежер или стринг...) отобразить TShiftState ... также я не знаю как можно отобразить ееее данную зарегистрированную кнопку в как бы текст окна ХотКея... просто у меня какая то не совместимость Борланда с виндой... ну он просто не отображает все возможности... то есть подсказки... в ХотКее он отображает всего 3 вида... Align , AutoSize, Anchors ... а бывает такое что вообще ничего не видно...  smile 
PM MAIL   Вверх
THandle
Дата 22.2.2009, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 25
Всего: 372



Цитата(Kirgston @  22.2.2009,  11:46 Найти цитируемый пост)
mod1


Как объявлено? Начальное значение присваиваешь? А то там может мусор оказаться. Выложи тестовый проект что ли...
PM   Вверх
Djinn
Дата 22.2.2009, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 18.5.2007

Репутация: нет
Всего: 1



http://forum.vingrad.ru/index.php?showtopi...t&p=1612976 тема подобная и пример программы по работе с Thotkey smile мне помогло... может и вам поможет...
PM MAIL   Вверх
Kirgston
Дата 22.2.2009, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Вот сделал...ну обявлено как unsigned short так требует ShortCutToKey я так и сделал =) 
Нет я не присваивал. Читал в книге мол это за меня делает компилятор в честь того что мол может быть мусор и потому если ничего не задать то компилятор присвоит переменной 0

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  HotKeys.rar 17,56 Kb
PM MAIL   Вверх
THandle
Дата 22.2.2009, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 25
Всего: 372



Kirgston, посмотри пример по ссылке которую дал Djinn. Ты не правильно обрабатываешь сообщение. Точнее ты объявляешь просто функцию. Она ничего не ловит.

Цитата(Kirgston @  22.2.2009,  13:19 Найти цитируемый пост)
Читал в книге мол это за меня делает компилятор в честь того что мол может быть мусор и потому если ничего не задать то компилятор присвоит переменной 0 


Локальные переменные нулем никто не инициализирует, это придется делать тебе smile
PM   Вверх
Kirgston
Дата 22.2.2009, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Извините ребята просто страничка ... криво обновляется... бывает такое что посты просто не вижу =)

уже разобрался и добил.... =) остается вопрос =) а нету там ничего на подобии текста окна? Просто я если ставлю разрешение на все модификаторы то оно мне выдает такое.... уууу Ctr+Shift+Alt + key а когда я снимаю это оно уже перестает работать... 
PM MAIL   Вверх
THandle
Дата 22.2.2009, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 25
Всего: 372



Kirgston, ничего не понял... но попробую угадать...

Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    UnregisterHotKey(Handle, hot);
        mod1 = 0; //обнуляем флаги..
    ShortCutToKey(HotKey1->HotKey, key1, st);
    if(st.Contains(ssShift)) mod1 |= MOD_SHIFT;
    if(st.Contains(ssCtrl)) mod1 |= MOD_CONTROL;
    if(st.Contains(ssAlt)) mod1 |= MOD_ALT;
    if (RegisterHotKey(Handle, hot, mod1, key1))
    MessageBox(Handle, "Good", NULL,NULL);
    else
    MessageBox(Handle, "Bed", NULL,NULL);
}


Кстати, что разрегистрировать будешь при первом нажатии на кнопку?
PM   Вверх
Kirgston
Дата 22.2.2009, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Ладненько щас буду пробовать исправить ;) а разрегистрировать надо ;) ибо может быть ошибка когда я зарегистрирую кнопку а она уже там была до этого. Потому в целях безопасности лучше удалить старую кнопку и поставить новую =)
PM MAIL   Вверх
Kirgston
Дата 22.2.2009, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Ребята большое спасибо =) а есть какая нибудь возможность сохранения кнопок? Чтобы я например перезашел в программу и параметры и кнопки остались? Пробовал с реестром... что то не выходит...
PM MAIL   Вверх
THandle
Дата 22.2.2009, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 25
Всего: 372



Цитата(Kirgston @  22.2.2009,  15:14 Найти цитируемый пост)
а разрегистрировать надо ;) 


Это то понятно, что разрегистрировать надо. Но что при первом нажатии на конопку будет, когда еще ничекго не зарегистрировано?

Kirgston, почему с реестром ничего не вышло? Можно сделать флаг по типу mod1, только or'ом добавлять туда еще последнюю кнопку(с буквой которая) и писать все это как REG_DWORD.
PM   Вверх
Kirgston
Дата 22.2.2009, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Ну... что это за программа в которой надо во время работы регистрировать кнопки =) само собой что они с самого старта регистрируются =) так что там проблем нету ;)

Дело в том... что возникло 2 проблемы 1) это в том что я не знаю как записывать переменную TShiftState ... как Строка или как число... ну да ладно это можно и "угадать" хотя предполагаю что лучше будет писать\читать как строку. 2) дело в том что я не знаю как отобразить сие чудо. То есть я не знаю как сделать так чтобы при чтении из реестра программно изменять по получены данным HotKey1->HotKey . Извините что столько тупых вопросов ставлю... просто у меня С++ не совместим с виндой... при работе я не вижу "помощи" при скажем набирании Form1-> . У меня ничего не всплывает, а если появится что то то там будет 1-2 функции. И иследовать С++ я не могу :( и чтобы что то сделать мне просто надо знать конкретно что надо писать :(
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0573 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.