Как приделать горячую клавишу к форме?

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Привет всем! Вот еще вопрос, я прячу форму, после чего к ней никак не попасть, как сделать горячую клавишу, лучше комбинацию?
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Код: Выделить всё

//В обработчике события OnCreate создаём горячую клавишу:
if not RegisterHotkey(Handle, 1, MOD_ALT or MOD_SHIFT, VK_F9) then
ShowMessage('Unable to assign Alt-Shift-F9 as hotkey.');
//В событии OnClose удаляем горячую клавишу:
UnRegisterHotkey( Handle, 1 );
//Добавляем обработчик в форму для сообщения
//WM_HOTKEY:
private // в секции объявлений формы
procedure WMHotkey( var msg: TWMHotkey ); message WM_HOTKEY;

procedure TForm1.WMHotkey( var msg: TWMHotkey );
begin
  if msg.hotkey = 1 then
  begin
    if IsIconic( Application.Handle ) then
      Application.Restore;
    BringToFront;
  end;
end;
[/color]
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Спасибо! Штука работает, спора нет, подскажи как можно поменять комбинацию из программы? Точнее, есть компонент HotKey, там он пишет нажатую комбинацию, допустим я ее сохраню в реестре, а как теперь ее подставить сюды:

Код: Выделить всё

RegisterHotkey(Handle, 1, MOD_ALT or MOD_SHIFT, VK_F12)
тут же MOD_*; VK_*; а у компонента-текст. Или я чего-то недопонимаю, разъясните плиииизз.
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Че-то я тоже ни чего не понял, но ты мне близок
причем тут реестр? MOD_ALT; - это системный отлов нажатия из винды(см Windows)[поправте кто поумней если не прав]
Давай на пальцах что сделать хочешь....????
[syntax=Delphi] [/syntax]
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

MOD_ALT, MOD_SHIFT и VK_F12 это константы. Ты можешь сам строить параметры в строке регистрации...
типа:

Код: Выделить всё

param1 := 0;
  if ???? then param1 := param1 or MOD_ALT;
  if ???? then param1 := param1 or MOD_SHIFT;
  if ???? then param1 := param1 or MOD_CTRL;
  param2 := Ord('A');
  RegisterHotkey(Handle, 1, param1, param2);
:) ))
С уважением, Lost Angel...
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Ща попробую на пальцах объяснить :)
Значит так, у нас есть такая штука:

Код: Выделить всё

 if not RegisterHotkey(Handle, 1, MOD_ALT or MOD_SHIFT, VK_F12) then
 ShowMessage('Unable to assign Alt-Shift-F11 as hotkey.');
Это значит если какая-то прога уже зарезервировала эту комбинацию, значит наша уже использовать ее не может. Логичный вывод, как сделать так,чтоб пользователь смог изменить ее на любую другую комбинацию, какая ему нравиться? А реестр я использую для хранения этих параметров, чтоб при перезапуске прога отображала последние изменения. [может конечно реестр - это не есть гуд,но другого придумать пока не могу :) ]
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Так блин, после then вместа ShowMessage вставляй код что-то типа формы предлагающей выбор и в конце рег. других...
Вариантов много на самом деле, надо только включить фантазию.. А переменные лучше считывать из файла, к примеру при переустановки win-ды реестр умрет а файл нет, опятьже в негоже можно горячие клавиши записывать(сколько плюсов)....
[syntax=Delphi] [/syntax]
Ответить