Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2011, 12:56   #11
MotoArhangel
Пользователь
 
Регистрация: 25.02.2011
Сообщений: 51
По умолчанию

Вот теперь скажи яснее что тебе от горячих клавиш надо?
MotoArhangel вне форума Ответить с цитированием
Старый 25.02.2011, 13:16   #12
Diablero
Пользователь
 
Регистрация: 31.01.2011
Сообщений: 42
По умолчанию

В общем, кое-как решил проблему следующим образом:


Код:
void __fastcall TFormMain::ApplicationEventsActivate(TObject *Sender)
{
        RHKCtrlF=RegisterHotKey(FormMain->Handle, 0x001, MOD_CONTROL, 'F');
        RHKCtrlC=RegisterHotKey(FormMain->Handle, 0x002, MOD_CONTROL, 'C');
}

void __fastcall TFormMain::ApplicationEventsDeactivate(TObject *Sender)
{
        if(RHKCtrlF) RHKCtrlF=!UnregisterHotKey(FormMain->Handle, 0x001);
        if(RHKCtrlC) RHKCtrlC=!UnregisterHotKey(FormMain->Handle, 0x002);
}
То есть каждый раз, когда приложение получает фокус, я регистрирую комбинации, а каждый раз, когда оно фокус ввода теряет, регистрацию сбрасывает. Но этот подход очень смахивает на костыль. Уверен, что всё здесь организуется гораздо проще.
Diablero вне форума Ответить с цитированием
Старый 25.02.2011, 13:18   #13
Diablero
Пользователь
 
Регистрация: 31.01.2011
Сообщений: 42
По умолчанию

Цитата:
Сообщение от MotoArhangel Посмотреть сообщение
Вот теперь скажи яснее что тебе от горячих клавиш надо?
Мне нужно, чтобы моё приложение перехватывало комбинации клавиш только когда находится в фокусе, а не "воровало" их у других активных в данный момент приложений. Ну например, если моё творение запущено, Ctrl-F в блокноте уже не работает
Diablero вне форума Ответить с цитированием
Старый 25.02.2011, 14:22   #14
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Ну и зачем ты регистрируешь глобальный обработчик?

Application.OnMessage - и лови свой Ctrl + F.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 26.02.2011, 11:13   #15
Diablero
Пользователь
 
Регистрация: 31.01.2011
Сообщений: 42
По умолчанию

А ларчик просто открывался
Суть в том, что собственно горячие клавиши (HotKeys) приложения так и должны работать - перехватывать комбинации клавиш даже если форма приложения неактивна. Реализовать же комбинации клавиш внутри активной формы достаточно просто - нужно лишь для события OnKeyDown обработать нажатие буквенно-цифровой клавиши, передаваемое через параметр Key с модификатором, передаваемым через параметр Shift. Свойство формы KeyPreview нужно выставить в true.

Код:
void __fastcall TFormMain::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
        if(Shift.Contains(ssCtrl)&&Key=='F') BtnFind->Click();
}
Diablero вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
Как обрубить все "ненужные" клавиши в меню программы. Ветас Паскаль, Turbo Pascal, PascalABC.NET 6 26.10.2009 18:01
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Как назначить "горячие" клавиши ekzobyte Общие вопросы Delphi 16 18.03.2009 21:15