Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как отловить комбинацию [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;

Удачи!


Наверх

Титульная страница Поиск, карта сайта Написать письмо