C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Работа с THotKey
SunDevil
Отправлено: 01.05.2006, 13:28


Не зарегистрирован







ВСЕМ ПРИВЕТ!
Вот такой вопрос: мне надо, чтобы по нажатию комбинации клавиш Ctrl+A открывалась Form2. Как мне это сделать, используя THotKey? Пробовал, пробовал, но ничего не выходит что-то. Надеюсь на вас! СПАСИБО!
Gal
Отправлено: 03.05.2006, 10:34


Станционный диспетчер

Группа: Участник
Сообщений: 124



В загол. файле Главной формы
CODE

private: // User declarations
       ATOM  KeyAtom;
       void __fastcall OnHotKeyPress(TMessage &Message);
public:  // User declarations
       __fastcall TMainForm(TComponent* Owner);
       __fastcall ~TMainForm();

   BEGIN_MESSAGE_MAP
       MESSAGE_HANDLER(WM_HOTKEY, TMessage, OnHotKeyPress)
   END_MESSAGE_MAP(TForm)

В срр При открытии главной формы
CODE

 KeyAtom = GlobalAddAtom( "HotKey" );
 if(!RegisterHotKey( Handle, KeyAtom, MOD_CONTROL | MOD_ALT, VK_F12))
  {
   MessageBox(0, "Can't register!", "RegisterHotKey", MB_OK);
  }

Обработка нажатия Ctrl+Alt+F12
CODE

void __fastcall TMainForm::OnHotKeyPress(TMessage &Message)
{
 unsigned char    VirtualKey;
 UINT             ModKey;

 ModKey = LOWORD(Message.LParam);
 VirtualKey = HIWORD(Message.LParam);

 if((ModKey & (MOD_ALT | MOD_CONTROL)) & (VirtualKey == VK_F12))
  {
   // Открываешь свою Form2
  }
}

призакрытии главной формы
CODE

 UnregisterHotKey( Handle, KeyAtom );
 GlobalDeleteAtom( KeyAtom );

Ну а если необходимо нажатие Ctrl+A подкоректируй сам

CyberMind
Отправлено: 03.05.2006, 14:57


Ученик-кочегар

Группа: Участник
Сообщений: 29



Может тебе не надо использовать THotKey?
А просто сделать так:
1) В форме, которая вызывает другую, поставить свойство
KeyPreview = true;
2) В обработчике события OnKeyDown этой формы написать например:
CODE
if (Shift.Contains(ssCtrl) && Key=='A') Form2->Show();

Вернуться в Вопросы программирования в C++Builder