Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/26: Рейтинг темы: голосов - 26, средняя оценка - 4.54
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,064
1

Горячии клавиши

23.04.2011, 23:34. Показов 5080. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Опять я

Посоветуйте господа форумчане как задать обработчик для Ctrl+Alt+g. Проще говоря программа работает в невидимом режиме и чтоб сделать ее видимой нажатием комбинации этих клавиш...

0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2011, 23:34
Ответы с готовыми решениями:

Сделать горячии клавиши для игры
Привет, хочу сделать горячие клавиши для игры, что-то на подобии QuickBinder хочу чтоб кто-то...

Горячие клавиши - обойти наведение фокуса и привязать клавиши клавиатуры к кнопкам на форме
всем доброго времени суток. столкнулся с такой проблемой. требуется чтобы при нажатии определенных...

Горячии клавиши
Подскажите как описать "горячии клавиши" в проге, если можно то с кодом?:)

Как программировать горячии клавиши в Бэйсике?
Помигите! Пожалуста ПРограмма написана на Вижуле Бэйсик Нужно на интерфейсе задать горячие клафиши!

10
1123 / 794 / 101
Регистрация: 01.02.2011
Сообщений: 1,880
Записей в блоге: 1
24.04.2011, 00:14 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,
      bool &Handled)
{
    if (Msg.message == WM_HOTKEY) // сообщение наше
        {
            if (Msg.wParam == 0x00F) // идентификатор горячей клавиши
                {
                    ShowMessage("Сработала горячая клавиша");
                }
        }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    UnregisterHotKey(Handle, // Handle окна
                    0x00F  // идентификатор горячего ключа
                        );
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    bool bRet = RegisterHotKey( Handle,
                0x00F, // идентификатор горячей клавишы, использующийся вместе с сообщением WM_HOTKEY
                        MOD_CONTROL + MOD_ALT, // зажатые CTRL и ALT
                        0x47 // вместе с клавишей G
                   );
        if ( bRet )
        {
            ShowMessage("Горячая клавиша зарегистрирована!");
        }
}
Вложения
Тип файла: rar горячая клавиша.rar (12.3 Кб, 57 просмотров)
1
Покинул форум
3188 / 1367 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
24.04.2011, 16:44 3
RegisterHotKey. Как сделать несколько RegisterHotKey и отменить регистрацию
1
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,064
21.05.2011, 08:27  [ТС] 4
Все прекрасно работает, а кто подскажет как предоставить пользователю выбор какую горячую клавишу задавать???
0
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
21.05.2011, 11:17 5
В конфиге программы, реестре и т.д.
определяешь сочетание горячих клавиш в виде строки
Я для простоту буду использовать параметры командной строки

Допустим, запускаешь свою прогу с ключом

с:\test.exe Ctrl+Alt+G

В программе делаем функцию

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const bool RegisterStringHotKey(HWND hAppWnd, const AnsiString &sHotKey,
    const int &iIdentifier) {
    TShortCut sc_hotkey = TextToShortCut(sHotKey);
    USHORT shKey = 0;
    TShiftState Shift;
    ShortCutToKey(sc_hotkey, shKey, Shift);
 
    UINT iModifiers = 0;
    if (Shift.Contains(ssShift)) {
        iModifiers += MOD_SHIFT;
    }
    if (Shift.Contains(ssCtrl)) {
        iModifiers += MOD_CONTROL;
    }
    if (Shift.Contains(ssAlt)) {
        iModifiers += MOD_ALT;
    }
 
    return RegisterHotKey(hAppWnd, iIdentifier, iModifiers, shKey);
}
В обработчике формы OnCreate пишешь

C++
1
2
3
4
5
if (ParamCount() == 1) {
    if (RegisterStringHotKey(Application->Handle, ParamStr(1), 0x00F)) {
        // successfully registered!
    }
}
В общем, строка должна состоять из сочетания клавиш,
как это задаётся в TMenuItem,TAction
C++
1
RegisterStringHotKey(Application->Handle, "Ctrl+F11", 0x00F);
1
Покинул форум
3188 / 1367 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
21.05.2011, 11:41 6
Цитата Сообщение от Samrisbe Посмотреть сообщение
как предоставить пользователю выбор какую горячую клавишу задавать?
Можно сделать через TEdit (установив свойство MaxLength равным 1 - доступен ввод только одного символа):
C++
1
2
3
4
5
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   RegisterHotKey( Handle,0x00F,MOD_CONTROL, Edit1->Text[1]);
}
//---------------------------------------------------------------------------
1
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
21.05.2011, 11:51 7
Цитата Сообщение от NiTan Посмотреть сообщение
RegisterHotKey( Handle,0x00F,MOD_CONTROL, Edit1->Text[1]);
А если пользователь захочет Ctrl+Alt+F11 ?

Если это делать из программы, то есть конкретный компонент THotKey на вкладке Win32

Просто я понял, что программа уже должна запуститься в скрытом состоянии,
а потом сочетанием горячих клавиш должна стать видимой
1
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,064
21.05.2011, 23:30  [ТС] 8
Цитата Сообщение от Maluda Посмотреть сообщение
А если пользователь захочет Ctrl+Alt+F11 ?

Если это делать из программы, то есть конкретный компонент THotKey на вкладке Win32

Просто я понял, что программа уже должна запуститься в скрытом состоянии,
а потом сочетанием горячих клавиш должна стать видимой
Иьенно так.
И вариант Nitana тоже можно попробовать.

Добавлено через 11 часов 5 минут
Цитата Сообщение от Maluda Посмотреть сообщение
А если пользователь захочет Ctrl+Alt+F11 ?

Если это делать из программы, то есть конкретный компонент THotKey на вкладке Win32

Просто я понял, что программа уже должна запуститься в скрытом состоянии,
а потом сочетанием горячих клавиш должна стать видимой
Я чуток не догоняю как регистрировать и убирать регистрацию, используя компонент THotKey
Кинул на форму button в собыии onClick не не могу увязать чтоб именно заданные пользователем клавиши регистрировались. Первый пуск приложения проходит в обычном режиме а затем узер сам выбирает и устанавливает клавиши и соответственно скрытый режим.

Добавлено через 18 минут
C++
1
2
3
4
void __fastcall TForm1::StrlAltGClick(TObject *Sender)
{
  HotKey1->HotKey= "Strl+Alt+G";
}
А здесь не пойму что компилятору не нравится.
0
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
22.05.2011, 10:28 9
Цитата Сообщение от Samrisbe Посмотреть сообщение
HotKey1->HotKey= "Strl+Alt+G";
Свойство HotKey является типом TShortCut, а не UnicodeString

C++
1
HotKey1->HotKey = TextToShortCut("Ctrl+Alt+G");


Цитата Сообщение от Samrisbe Посмотреть сообщение
Я чуток не догоняю как регистрировать и убирать регистрацию, используя компонент THotKey
Кинул на форму button в собыии onClick не не могу увязать чтоб именно заданные пользователем клавиши регистрировались.
THotKey работает таким образом, что пользователю надо в этом компоненте нажать сочетание
клавиш и его текстовое обозначение появляется в его поле.

Для регистрации этого сочетания пишешь вот это

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
const bool RegisterShortCut(HWND hAppWnd, const TShortCut &sc_hotkey,
    const int &iIdentifier) {
    USHORT shKey = 0;
    TShiftState Shift;
    ShortCutToKey(sc_hotkey, shKey, Shift);
 
    UINT iModifiers = 0;
    if (Shift.Contains(ssShift)) {
        iModifiers += MOD_SHIFT;
    }
    if (Shift.Contains(ssCtrl)) {
        iModifiers += MOD_CONTROL;
    }
    if (Shift.Contains(ssAlt)) {
        iModifiers += MOD_ALT;
    }
 
    return RegisterHotKey(hAppWnd, iIdentifier, iModifiers, shKey);
}
 
// ---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender) {
    RegisterShortCut(Application->Handle, HotKey1->HotKey, 0x0f);
}
Добавлено через 3 минуты
Как убирать регистрацию, тебе kzru_hunter уже писал

Цитата Сообщение от kzru_hunter Посмотреть сообщение
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
UnregisterHotKey(Application->Handle, // Handle приложения
0x00F // идентификатор горячего ключа
);
}
1
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,064
22.05.2011, 12:52  [ТС] 10
Всем программистам проявившем участие в теме БОЛЬШОЕ СПАСИБО!

И один маленький вопрос как данные HotKey1-> HotKey сохранить в ини файл а затем прочитать.
0
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
22.05.2011, 13:57 11
Записать
C++
1
2
3
4
#include <memory>
#include <IniFiles.hpp>
std::auto_ptr<TIniFile>Ini(new TIniFile("c:\\test.ini"));
Ini->WriteInteger(HotKey1->Name, "HotKey", HotKey1->HotKey);
Прочитать

C++
1
2
3
4
5
6
#include <memory>
#include <IniFiles.hpp>
if (FileExists("c:\\test.ini")) {
           std::auto_ptr<TIniFile>Ini(new TIniFile("c:\\test.ini"));
    HotKey1->HotKey = Ini->ReadInteger(HotKey1->Name, "HotKey", HotKey1->HotKey);
}
2
22.05.2011, 13:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2011, 13:57
Помогаю со студенческими работами здесь

Не работают горячии клавиши, когда форма становится поверх всех окон
На форме есть checkbox, который делает форму поверх всех остальных с помощью...

"Горячии клавиши"
Все знают апи функцию RegisterHotKey, но она не всегда подходит для реализации горячих клавиш т.к....

Горячии кнопки в Visual Assist X
хм... в общем как их настроить? А то лениво каждый раз делать Меню-&gt;VAssistX-&gt;Refractor-&gt;Create...

При нажатии клавиши I проверить и вывести на экран состояние клавиши Insert
Добрый день, помогите с заданием при нажатии клавиши I проверить и вывести на экран состояние...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru