![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как отловить комбинацию [Contrl]+[Shift] [D6]
Novichek © (2002-10-22 12:52:00)Помогите пожалуйста отловить комбинацию [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;
Novichek (2002-11-12 19:06:00) [1]спасибо всем, уже нашел.
RegisterHotKey(handle,id,(mod_CONTROL or mod_shift),vk_control);
RegisterHotKey(handle,id2,(mod_CONTROL or mod_shift),vk_shift);
Novichek (2002-11-12 18:33:00) [2]не получается.
а вот если вместо 0 поставить код клавиши, то получается комбинация contrl+shift+клавиша
Eugen Honeker (2002-11-11 21:19:00) [3]попробуй вот такой вариант
RegisterHotKey(handle, id, MOD_CONTROL or MOD_SHIFT, 0)
Novichek (2002-11-11 21:11:00) [4]глюка уже нет, но все же, как мне это все запихнуть в горячие клавиши?
Song (2002-11-11 20:57:00) [5]Не пробовал. Это нужно Вам, а не мне.
Попробуйте использовать GetKeyState()
Novichek (2002-11-11 20:25:00) [6]Song ©
в предложенном варианте: Song © (11.11.02 09:09), есть один большой недостаток, а именно если нажать сначала или контрл или шифт, потом его отпустить, после этого нажать любые клавиши, а потом нажать шифт или контрл(в зависимости от того что было нажато первым) , то срабатывает условие и выпадает сообщение об этом, хотя контрл и шифт были нажаты не одновременнои между ними были нажаты еще и другие клавиши.
Novichek (2002-11-11 18:55:00) [7]Song © (11.11.02 09:09)
а ты сам хоть пробовал это?
на это условие программа выходит только после того как были нажаты какие либо другие зарегестрированные клавиши.
Novichek (2002-11-11 18:45:00) [8]Song © (11.11.02 09:09)
не получается что-то... :(((
Song (2002-11-11 09:09:00) [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 02:25:00) [10]в смысле? а как? обьясни мне, тупому, пожалуйста!!!!!
Song (2002-11-08 21:11:00) [11]Ну дак и забабахай это условие в обработчик WM_HOTKEY
Novichek (2002-11-08 20:04:00) [12]>>Крот © (23.10.02 08:51)
так не получилось
>> serd_hhc © (26.10.02 03:29)
это работает только если специально на это условие выйти.
может у кого еще есть какие идеи как это сделать?
Novichek (2002-10-28 14:18:00) [13]да, но это работает только если на это условие програмно перейти, а как эту комбинацию засунуть в горячие клавиши?
serd_hhc (2002-10-26 03:29:00) [14]
while true do
begin
if (GetAsyncKeyState(VK_SHIFT)<>0) and
(GetAsyncKeyState(VK_[Кажется CONTROL])<>0) then
ShowMessage("Urrraaaa....");
Sleep(150);
end;
Думаю разберёшься...
Novichek (2002-10-26 00:15:00) [15]а как эту комбинацию засунуть в горячие клавиши?
Novichek (2002-10-23 18:16:00) [16]а как эту комбинацию засунуть в горячие клавиши?
Крот (2002-10-23 08:51:00) [17]Используете событие OnKeyDown таким образом:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Shift = [ssShift, ssCtrl] then
ShowMessage("Ура, получилось!");
end;
Удачи!