Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.013 c
1-26559
kull
2003-05-28 12:20
2003.06.09
Функция сравнения файлов...


3-26397
Zn
2003-05-19 18:41
2003.06.09
При отображении в DBGrid поля Float отображается мусор.


14-26776
y-soft
2003-05-21 19:18
2003.06.09
Delphi 7 и Windows CE.NET


14-26650
ZoomerSahs
2003-05-13 23:38
2003.06.09
Зацените офигительну демку.


14-26710
Лис
2003-05-21 18:40
2003.06.09
Парни, объясните чайнику как в Дельфи добраться до прерываний!




   Наверх