Форум: "Основная";
Текущий архив: 2003.06.09;
Скачать: [xml.tar.bz2];
Внизрегистрация горячих сочетаний клавиш. Найти похожие ветки
← →
bloodman (2003-05-29 19:10) [0]Здравствуйте мастера! У меня такая проблема:
Мне нужно программно зарегистрировать сочитание.Пишу такой код:
ShortMod : Cardinal ;
...
ShortMod:=0;
IF pos("Ctrl",ShortCutArray[FX])<>0 Then ShortMod:=ShortMod+mod_control;
IF pos("Alt",ShortCutArray[FX])<>0 Then ShortMod:=ShortMod+MOD_ALT;
IF pos("Shift",ShortCutArray[FX])<>0 Then ShortMod:=ShortMod+MOD_SHIFT;
IF pos("Win",ShortCutArray[FX])<>0 Then ShortMod:=ShortMod+MOD_WIN;
strinForShort:=ShortCutArray[FX];
lalala:=ord(strinForShort[length(strinForShort)]);
ShortCutID[FX]:=GlobalAddAtom(PChar(Random(9999999)));
IF not RegisterHotKey(Handle,ShortCutID[FX],ShortMod,ord(strinForShort[length(strinForShort)])) then
messageDlg("error",mterror,[mbok],0);
Ошибок не выдает, но и hotkey не регистрирует :( а если написать
так:
RegisterHotKey(Handle,ShortCutID[FX],ShortMod,82). То регистрирует. Но если написать так(что ,в принцепе одно и тоже):
RegisterHotKey(Handle,ShortCutID[FX],ShortMod,Ord("r"))
То снова не регистрирует :(( В чем проблема??? Сообщения ловлю так:
...
procedure hotykey(var msg:TMessage); message WM_HOTKEY;
...
procedure TBLMainForm.hotykey(var msg:TMessage);
begin
MessageDlg("La-La-la",mtError,[mbOK],0);
end;
Подскажите в чем проблема плиззз.
← →
bloodman (2003-05-29 19:32) [1]Неужели такой сложный вопрос???
← →
Skier (2003-05-29 19:37) [2]сдаётся мне что всё-таки так надо писать :
ShortMod := ShortMod or mod_control;
ShortMod := ShortMod or MOD_ALT;
← →
bloodman (2003-05-29 20:00) [3]Может быть , работает и так и по-моему.Но проблема в другом.А именно : ord(strinForShort[length(strinForShort)]) Если ставить в качестве последнего параметра этот код , то ничего не работает :( Может как - то по другому нужно кодсимвола узнавать?
← →
Skier (2003-05-29 20:12) [4]>bloodman © (29.05.03 20:00)
1)
> Может быть , работает и так и по-моему.
Дело в том что арифметическое сложение и побитовое сложение
это РАЗНЫЕ операции. Советую поправить
2)
Из справки по Win API
BOOL RegisterHotKey(
HWND hWnd, // window to receive hot-key notification
int id, // identifier of hot key
UINT fsModifiers, // key-modifier flags
UINT vk // virtual-key code
);
Parameters
hWnd
//...................
id
Specifies the identifier of the hot key. No other hot key in the calling thread should have the same identifier. An application must specify a value in the range 0x0000 through 0xBFFF. A shared dynamic-link library (DLL) must specify a value in the range 0xC000 through 0xFFFF (the range returned by the GlobalAddAtom function). To avoid conflicts with hot-key identifiers defined by other shared DLLs, a DLL should use the GlobalAddAtom function to obtain the hot-key identifier.
← →
Skier (2003-05-29 20:17) [5]RegisterHotKey(Handle,ShortCutID[FX],ShortMod,Ord(" R"))
← →
bloodman (2003-05-30 01:16) [6]> Skier ©
Все сделал как ты сказал.Все заработало! Большое спасибо!!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.06.09;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c