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

Вниз

как отловить комбинацию   Найти похожие ветки 

 
Novichek   (2002-10-22 12:52) [0]

Помогите пожалуйста отловить комбинацию [Contrl]+[Shift]и при ее нажатии вывести сообщение? пробовал так, но не помогает:

procedure hotykey(var msg:TMessage); message WM_HOTKEY;
...
var
Form1: TForm1;
id:Integer;
...
procedure TForm1.hotykey(var msg:TMessage);
begin
if (msg.LParamLo=mod_shift) and (msg.LParamHi=MOD_CONTROL) then
begin
showmessage("uuuuuuuuuu");
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
id:=GlobalAddAtom("hotkey");
RegisterHotKey(handle,id,mod_shift,MOD_CONTROL);
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
UnRegisterHotKey(handle,id);
end;


 
Крот   (2002-10-23 08:51) [1]

Используете событие OnKeyDown таким образом:


procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Shift = [ssShift, ssCtrl] then
ShowMessage("Ура, получилось!");
end;

Удачи!


 
Novichek   (2002-10-23 18:16) [2]

а как эту комбинацию засунуть в горячие клавиши?


 
Novichek   (2002-10-26 00:15) [3]

а как эту комбинацию засунуть в горячие клавиши?


 
serd_hhc   (2002-10-26 03:29) [4]

while true do
begin
if (GetAsyncKeyState(VK_SHIFT)<>0) and
(GetAsyncKeyState(VK_[Кажется CONTROL])<>0) then
ShowMessage("Urrraaaa....");
Sleep(150);
end;


Думаю разберёшься...


 
Novichek   (2002-10-28 14:18) [5]

да, но это работает только если на это условие програмно перейти, а как эту комбинацию засунуть в горячие клавиши?


 
Novichek   (2002-11-08 20:04) [6]

>>Крот © (23.10.02 08:51)
так не получилось

>> serd_hhc © (26.10.02 03:29)
это работает только если специально на это условие выйти.

может у кого еще есть какие идеи как это сделать?


 
Song   (2002-11-08 21:11) [7]

Ну дак и забабахай это условие в обработчик WM_HOTKEY


 
Novichek   (2002-11-11 02:25) [8]

в смысле? а как? обьясни мне, тупому, пожалуйста!!!!!


 
Song   (2002-11-11 09:09) [9]

procedure TForm1.hotykey(var msg:TMessage);
begin
inherited;
if (GetAsyncKeyState(VK_SHIFT)<>0) and
(GetAsyncKeyState(VK_[Кажется CONTROL])<>0) then
ShowMessage("Urrraaaa....");
end;


 
Novichek   (2002-11-11 18:45) [10]

Song © (11.11.02 09:09)
не получается что-то... :(((


 
Novichek   (2002-11-11 18:55) [11]

Song © (11.11.02 09:09)
а ты сам хоть пробовал это?
на это условие программа выходит только после того как были нажаты какие либо другие зарегестрированные клавиши.


 
Novichek   (2002-11-11 20:25) [12]

Song ©
в предложенном варианте: Song © (11.11.02 09:09), есть один большой недостаток, а именно если нажать сначала или контрл или шифт, потом его отпустить, после этого нажать любые клавиши, а потом нажать шифт или контрл(в зависимости от того что было нажато первым) , то срабатывает условие и выпадает сообщение об этом, хотя контрл и шифт были нажаты не одновременно и между ними были нажаты еще и другие клавиши.


 
Song   (2002-11-11 20:57) [13]

Не пробовал. Это нужно Вам, а не мне.
Попробуйте использовать GetKeyState()


 
Novichek   (2002-11-11 21:11) [14]

глюка уже нет, но все же, как мне это все запихнуть в горячие клавиши?


 
Eugen Honeker   (2002-11-11 21:19) [15]

попробуй вот такой вариант

RegisterHotKey(handle, id, MOD_CONTROL or MOD_SHIFT, 0)


 
Novichek   (2002-11-12 18:33) [16]

не получается.
а вот если вместо 0 поставить код клавиши, то получается комбинация contrl+shift+клавиша


 
Novichek   (2002-11-12 19:06) [17]

спасибо всем, уже нашел.

RegisterHotKey(handle,id,(mod_CONTROL or mod_shift),vk_control);
RegisterHotKey(handle,id2,(mod_CONTROL or mod_shift),vk_shift);



Страницы: 1 вся ветка

Текущий архив: 2002.12.26;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.007 c
6-86054
Repeater
2002-10-29 20:49
2002.12.26
Как работать с SOCKS сервером?


4-86226
Артём
2002-11-13 01:23
2002.12.26
Драйвера


1-85920
___Nikolay
2002-12-15 14:35
2002.12.26
DBGRID с фиксированным столбцом


14-86083
Malder
2002-10-28 22:51
2002.12.26
IPX/SPX firewall


1-85896
brat
2002-12-16 23:34
2002.12.26
Помогите перейти к базису ИЛИ-НЕ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский