Текущий архив: 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.008 c