Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.09;
Скачать: CL | DM;

Вниз

регистрация горячих сочетаний клавиш.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
3-26342
jack100
2003-05-19 10:42
2003.06.09
У кого есть опыт работы с ExpressQuantumGrid?


14-26654
zhenya
2003-05-23 21:37
2003.06.09
InetDetect????


14-26737
neuro
2003-05-22 17:52
2003.06.09
STL 4 delphi


1-26540
Zilog
2003-05-27 09:43
2003.06.09
Требуется вести журнал. Строчка в журнале может быть разного...


3-26358
mrcat
2003-05-20 16:29
2003.06.09
Type mismatch in expression