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

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

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

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

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

0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
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
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.05.2011, 13:57
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru