Форум: "KOL";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];
ВнизKeyPreview Найти похожие ветки
← →
Kealon © (2006-03-20 07:18) [0]Как правильно перехватить нажатие клавиши?
Здесь был похожий вопрос
http://delphimaster.net/view/11-1123695011/
function TForm1.DoMessage(var Msg:TMsg;var Rslt:integer):Boolean;
begin
Result:=false;
if (msg.message = WM_KEYUP) then begin
result:=true;
// сюда вообще не попадает
end;
...
самое интересное например перехватываю нажатие клавиши на EditBox
(onKeyPress или onKeyUp)
и Key делаю равным 0, но символ всё равно вводится в Edit, как побороть!!!???
← →
ECM © (2006-03-20 16:28) [1]
> перехватываю нажатие клавиши на EditBox
> (onKeyPress или onKeyUp)
> и Key делаю равным 0, но символ всё равно вводится в Edit,
> как побороть!!!???
А какой в этом смысл, если всё-равно приходит событие OnChar
вот там Key := #0 и ставьте!
← →
Kealon © (2006-03-21 06:28) [2]в том то и дело что мне нужно перехватить нажатие клавиш всей формы, просто активным у меня всё время оказывается EditBox
нашёл дерективу
{$DEFINE KEY_PREVIEW}
и установил form.KewPreview:=true
при этом нажатия перехватываются на форме, но только OnKeyDown,
OnChar и OnKeyUp не ловятся совсем
и если перехватитьfunction TForm1.DoMessage(var Msg:TMsg;var Rslt:integer):Boolean;
begin
Result:=false;
if (msg.message = WM_KEYUP)and(msg.wparam = 101) then begin
result:=true;
{символ 5 на NumLock клавиат.}
end;
end
то в OnKeyDown формы соответственно ничего не приходит
а в OnKeyDown EditBox-а все нажатия доходят и символ появляется в EditBox-е
я полагаю не совсем корректно вызывать обработчик EditBox-а если главная форма его уже обработала
задача то не просто слежение за нажатыми клавишами но и возможность их блокировки, независимо от того какой контрол в данный момент обрабатывает нажатие клавиш
Delphi 7, WinXP SP2
версия KOL
//[VERSION]
****************************************************************
* VERSION 2.30
****************************************************************
//[END OF VERSION]
КАК ОТСЛЕДИТЬ НАЖАТИЕ КЛАВИШ НА ЛЮБОМ КОНТРОЛЕ, НЕ ЗНАЯ САМИХ КОНТРОЛОВ ИЗ ГЛАВНОЙ ФОРМЫ И БЛОКИРОВАТЬ ЧАСТЬ НАЖАТИЙ???
← →
Kealon © (2006-03-21 11:12) [3]Кроме того не перехватываются часть системных сочетаний, которые в VCL глотаются на ура F10, Alt+F4
с этим как бороться?
а проверять их надо
← →
Vladimir Kladov (2006-03-21 19:24) [4]OnMessage ловит все. Надо смотреть WM_KEYDOWN. Если нужен WM_char, то надо еще смотреть WM_SYSchar, тогда ловятся системные клавиши (Alt).
← →
Kealon © (2006-03-22 15:19) [5]WM_SYSchar - ловиться то оно ловится, но только на активном компоненте,
а как поймать на форме?
KeyPreview:=true
я так полагаю должен пересылать все события от клавиатуры на форму
почему идёт тока WM_KEYDOWN ?
Alt+F4 код 115function THameleonMainForm.KOLForm1Message(var Msg: tagMSG;
var Rslt: Integer): Boolean;
begin
Result:=false;
if (Msg.message=WM_SYSCHAR) then begin
Result:=true;
//вот сюда ни разу не попадает
end;
end;
← →
Vladimir Kladov (2006-03-22 16:55) [6]Все прекрасно ловится, именно этим кодом. Но KeyPreview надо включать:
Form.KeyPreview := TRUE; + опция KEY_PREVIEW в проекте.
← →
Kealon © (2006-03-23 06:21) [7]Не ловится у формы, :(
хотя
Form.KeyPreview := TRUE; + опция KEY_PREVIEW в проекте стоят и стоялиfunction THameleonMainForm.KOLForm1Message(var Msg: tagMSG;
var Rslt: Integer): Boolean;
begin
Result:=false;
if (Msg.message=WM_SYSCHAR) then begin
Result:=true;
//вот сюда так и не попадает
end;
end;
а можно ваш пример?
← →
Vladimir Kladov (2006-03-23 15:22) [8]Да тот же. = WM_CHAR) or (... = WM_SYSHAR только. Апплет не используется. Если есть Applet, возможно - ловить надо в его OnMessage.
← →
Kealon © (2006-03-23 17:15) [9]Апплет стоит,
WM_CHAR приходит на его обработку,а WM_SYSCHAR нетfunction THameleonMainForm.KOLApplet1Message(var Msg: tagMSG;
var Rslt: Integer): Boolean;
begin
Result:=false;
if (Msg.message=WM_SYSCHAR) then begin
Result:=true;
//это сообщение даже не приходит, F10 и Alt+F4 работает всем на зло
end else
if (Msg.message=WM_CHAR) then begin
Result:=true;
//блокирует все клавиши, даже у модальных диалогов
end;
end;
как быть? :(
← →
Kealon © (2006-03-23 17:15) [10]Апплет стоит,
WM_CHAR приходит на его обработку,а WM_SYSCHAR нетfunction THameleonMainForm.KOLApplet1Message(var Msg: tagMSG;
var Rslt: Integer): Boolean;
begin
Result:=false;
if (Msg.message=WM_SYSCHAR) then begin
Result:=true;
//это сообщение даже не приходит, F10 и Alt+F4 работает всем на зло
end else
if (Msg.message=WM_CHAR) then begin
Result:=true;
//блокирует все клавиши, даже у модальных диалогов
end;
end;
как быть? не ловить же у всех контролов, :(
← →
Kealon © (2006-03-23 18:50) [11]F10 ловится на
(Msg.message=WM_SYSCOMMAND) and (Msg.wParam=SC_KEYMENU)
а WM_SYSCHAR не ловится даже у активного контрола
труба какая то просто
← →
Vladimir Kladov (2006-03-23 22:28) [12]Ну конечно, F10, Alt+F4... Вы может еще Ctrl+Alt+Del отловить захочете? Под приходом WM_SYSHAR я понимаю Alt+"S" например. Бывает нужда (например, в эмуляторе) ловить все клавиши (эмулирую "чужую" клавиатуру и не давая системе перехватить инициативу). Тогда приходится от WM_CHAR отказываться (и наоборот, подавлять его, на случай, если он все-таки придет), а работать только с WM_KEYDOWN+WM_SYSKEYDOWN и WM_KEYUP+WM_SYSKEYUP. Так я делал, работает очень хорошо.
← →
Kealon © (2006-03-24 20:46) [13]F10, Alt+F4 действительно нужно ловить, старая версия программы написанная под VCL это делала
Программа использует настройку горячих клавиш от пользователя и F10 например использовалась,каждая такая кнопка на счету, а Ctrl+Alt+Del ни к чему, а Alt+F4 за компанию приплюсовалась, что бы не нажать случайно, на неё пустой хоткей стоял
http://clanskitalec.narod.ru/other.htm
← →
Kealon © (2006-03-27 14:12) [14]Наконец то написал первый релиз, выложил
mudclient.narod.ru
Проблема с перехватом Alt+F4 и F10 так и осталась
← →
[e]Bu$ter © (2006-06-24 15:52) [15]Скажите пожалуйста, что нужно сделать для того, чтоб можно было установить
Form.KeyPreview := TRUE;
?
У моей FORMы вообще такого свойства нет :(
← →
ECM © (2006-06-24 16:00) [16]> У моей FORMы вообще такого свойства нет
Добавьте в опции проекта ( Conditional Defines)
KEY_PREVIEW
И пересоберите проект... Оно появится :)
И вообще пройдитесь поиском в KOL.PAS по этому поводу - и посмотрите, почитайте...
← →
[e]Bu$ter © (2006-06-24 16:10) [17]
> И пересоберите проект... Оно появится :)
Добавить то я добавил, а вот пересобрать я не догадался.
Спасибо, заработало.
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.034 c