Главная страница
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.5 MB
Время: 0.015 c
1-85922
Jeka
2002-12-09 12:23
2002.12.26
tray


3-85791
Hynter
2002-12-06 05:35
2002.12.26
Help! как узнать количество и название таблиц???


14-86098
romychk
2002-12-05 12:55
2002.12.26
Socket - все в одном


4-86229
Cosmic
2002-11-10 16:49
2002.12.26
Как в консоли сделать таймер?


1-85925
Nimda
2002-12-17 11:05
2002.12.26
Ne ponal.