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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2015, 00:33   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию Почему на ряду со всеми, не срабатывает hot key "F12"

Доброе всем время суток,
а подскажите, почему, следующий код, для работы "горячих клавиш", работает для всех клавиш, кроме кода "123", это клавиша - "F12"?

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

const
    ID = WM_USER + 1;

type
  Tform_Test = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure WM_HotKey(var Message:TMessage); message WM_HOTKEY;
  public
    { Public declarations }
  end;

var
  form_Test: Tform_Test;

implementation

{$R *.dfm}

procedure Tform_Test.FormCreate(Sender: TObject);
begin
  RegisterHotKey(Handle, 112, 0, 112); //for "Hot key" = "F1"
  RegisterHotKey(Handle, 113, 0, 113); //for "Hot key" = "F2"
  RegisterHotKey(Handle, 121, 0, 121);
  RegisterHotKey(Handle, 122, 0, 122);
  RegisterHotKey(Handle, 123, 0, 123); //for "Hot key" = "F12"
end;

procedure Tform_Test.FormDestroy(Sender: TObject);
begin
  UnregisterHotKey(Handle, 50);
  UnregisterHotKey(Handle, 112);
  UnregisterHotKey(Handle, 113);
  UnregisterHotKey(Handle, 121);
  UnregisterHotKey(Handle, 122);
  UnregisterHotKey(Handle, 123);
end;

procedure Tform_Test.WM_HotKey(var Message:TMessage);
begin
  case Message.WParam  of
    50: showmessage('key is push "2"');
    112: showmessage('key is push "F1"');
    113: showmessage('key is push "F2"');
    121: showmessage('key is push "F10"');
    122: showmessage('key is push "F11"');
    123: showmessage('key is push "F12"');
  end;
end;

end;

end.
Хотя если для "F12" использовать следующий код:

Код:
procedure Tform_Test.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key = VK_F12 then
    showmessage('key is push "F12"');
end;
все работает, аж бегом
KBO вне форума Ответить с цитированием
Старый 29.10.2015, 07:51   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Проверил у себя - не работает твой код.
ИМХО код F12 не 123...
По другому объяснить не могу.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.10.2015, 08:03   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

123. RegisterHotKey чего возвращает для F12?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.10.2015, 08:29   #4
Vapaamies
Просветитель
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,844
По умолчанию

Цитата:
Сообщение от KBO Посмотреть сообщение
а подскажите, почему, следующий код, для работы "горячих клавиш", работает для всех клавиш, кроме кода "123", это клавиша - "F12"?
Так и должно быть, этот код не должен работать. Если что-то срабатывает, это наведенный эффект, работающий только на компьютере программиста при каких-то условиях.

Логика RegisterHotKey предполагает, что возвращаемый код сохраняется в переменную, после чего проверяется в обработчике событий. Переписывайте.
В разработке: воспроизводственный контур ИТ
Vapaamies вне форума Ответить с цитированием
Старый 29.10.2015, 09:51   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Логика RegisterHotKey предполагает, что возвращаемый код сохраняется в переменную, после чего проверяется в обработчике событий.
Шта шта?? О_о
Цитата:
RegisterHotKey чего возвращает для F12?
Совет дельный. Я проверить не догадался. Только что проверил у себя - пишет "Назначенная клавиша уже кем-то зарегена"
I'm learning to live...

Последний раз редактировалось Stilet; 29.10.2015 в 09:53.
Stilet вне форума Ответить с цитированием
Старый 29.10.2015, 11:10   #6
Vapaamies
Просветитель
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,844
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Шта шта?? О_о
На ночь глядя с RegisterMessage попутал.

К слову сказать, в MSDN написано:
Цитата:
The F12 key is reserved for use by the debugger at all times, so it should not be registered as a hot key. Even when you are not debugging an application, F12 is reserved in case a kernel-mode debugger or a just-in-time debugger is resident.
В разработке: воспроизводственный контур ИТ
Vapaamies вне форума Ответить с цитированием
Старый 29.10.2015, 11:19   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
На ночь глядя с RegisterMessage попутал.
Э-э-э...
Цитата:
Сегодня, 07:29
А сколько же у тебя на часах то было? О_о Форум. чего опять время тащит черти откудлова?
Цитата:
в MSDN написано:
А-а-а... Окак!
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.10.2015, 15:03   #8
Vapaamies
Просветитель
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,844
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А сколько же у тебя на часах то было? О_о Форум. чего опять время тащит черти откудлова?
Гы-гы, это за за утренним чаем написал, выходит. Тады не проснулся еще, для меня как ночь была.
В разработке: воспроизводственный контур ИТ
Vapaamies вне форума Ответить с цитированием
Старый 29.10.2015, 16:00   #9
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Я вчера, перед эти вопросом, просматривал этот форум, на предмет кода для "F12", кстати и нашел, тут тоже этот код "123" и по логике вроде подходит ("F10" = 121, "F11" = 122).
Но в действительности оказывается немного не так.
Так какой же код у "F12"?
KBO вне форума Ответить с цитированием
Старый 29.10.2015, 16:05   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

123. Но горячую клавишу видимо низзя. Читай #6, если что со словарем. Ну или по ссылке от туда же
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" Alexsandrr Microsoft Office Excel 4 19.10.2013 14:22
установил прогу "reiting.exe" присланную в сообщении всеми нам известного сайта VKONTAKTE.RU, как удалить MAP78 Безопасность, Шифрование 21 16.12.2012 17:00
1. Присвоить переменной значение ячейки, находящейся в ТЕКУЩЕМ ряду в столбце "E" 2.Вопрос по автофильтру Павел-812 Microsoft Office Excel 6 27.07.2011 10:32
Почему не работает Case txt Like "текст1", "текст2" Oooleg Microsoft Office Excel 2 15.07.2009 10:08