Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.02.26;
Скачать: CL | DM;

Вниз

Как сделать, чтобы TTouchKeyboard не получала фокус   Найти похожие ветки 

 
ttUser ©   (2016-03-21 15:47) [0]

В более менее свежих версиях Delphi есть компонент TTouchKeyboard, который представляет собой виртуальную клавиатуру.

Если компонент, куда нужно вводить текст находится на той же форме, что и TTouchKeyboard - то все хорошо.

Но если делать "плавающую" виртуальную клавиатуру в отдельной форме (форма 1), то возникает проблема. Устанавливаем фокус на компонент для ввода (он находится на форма 2). Потом нажимаем на клавишу виртуальной клавиатуры - и фокус уходит на форма 1. При этом символ не вводится в компонент, который находится на форма 2.

Можно сделать как-то, чтобы фокус не уходил на форма 1, где находится виртуальная клавиатура? А оставался на компоненте для ввода.


 
sniknik ©   (2016-03-21 16:44) [1]

> не уходил на форма 1,
ShowWindow(theWindowHandle, SW_SHOWNOACTIVE);

но вообще, я бы виртуальную клавиатуру от панели бы делал/наследовал (если компонент).


 
DayGaykin ©   (2016-03-21 17:13) [2]

Для формы с клавиатурой:

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
 inherited;
 Params.ExStyle := Params.ExStyle or WS_EX_NOACTIVATE;
end;


 
ttUser ©   (2016-03-21 17:32) [3]


> ShowWindow(theWindowHandle, SW_SHOWNOACTIVE);

У меня главная форма, на ней лежит TTouchKeyboard
Для главной формы делаю:

ShowWindow(Self.Handle, SW_HIDE);
ShowWindow(Self.Handle, SW_SHOWNOACTIVATE);

это не помогает


> Для формы с клавиатурой:

хорошее решение, но есть прикол. Это действует для всех ЧУЖИХ приложений. То есть, таким образом легко вводить символы в Excel.
Но если у тебя две формочки одного приложения, то фокус все равно уходит на форму с клавиатурой.

Подозреваю, что пробрасывается какое-то VCL сообщение, но точно разобраться я не смог :(


 
sniknik ©   (2016-03-21 18:23) [4]

> У меня главная форма
для главной лучший вариант DayGaykin ©   (21.03.16 17:13) [2] а не пере показ...

> то фокус все равно уходит на форму с клавиатурой.
???

> Подозреваю, что пробрасывается какое-то VCL сообщение
подозреваю наличие 17й строки и ошибки в ней.


 
ttUser ©   (2016-03-21 18:33) [5]


> > то фокус все равно уходит на форму с клавиатурой.
> ???

а что непонятно?

Имеем форму 1 и на ней клавиатура TTouchKeyboard. Имеем форму 2, на которой находится контрол для ввода.

Если форма 2 - это чужое приложение (в том числе дельфовое), то все работает. При клике по клавиатуре на форме 1 фокус эта форма 1 не получает.

Если же в одном приложении открыть форму 1 и форму 2, то при клике на клавиатуру, находящуюся на форме 1 - она получает фокус все равно, хотя у формы 1 выставлен WS_EX_NOACTIVATE


 
sniknik ©   (2016-03-21 18:56) [6]

не делай Show делай ShowModal или вторую форму тоже сделай не активируемой...

а лучше логику меняй, не делай главным то что логичнее дополнением.


 
Dimka Maslov ©   (2016-03-21 19:25) [7]

Могу ошибаться, но надо бы поперехватывать сообщение WM_MOUSEACTIVATE


 
ttUser ©   (2016-03-22 11:27) [8]


> Могу ошибаться, но надо бы поперехватывать сообщение WM_MOUSEACTIVATE

всё сработало!
Спасибо!



Страницы: 1 вся ветка

Текущий архив: 2017.02.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.004 c
2-1434957180
Djonik
2015-06-22 10:13
2017.02.26
idhttp json - авторизация qiwi


15-1458564457
ttUser
2016-03-21 15:47
2017.02.26
Как сделать, чтобы TTouchKeyboard не получала фокус


2-1434893697
олямнап
2015-06-21 16:34
2017.02.26
Сортировка по убыванию


1-1348498746
jacksotnik
2012-09-24 18:59
2017.02.26
Вопрос по fastreport


2-1434959523
Арт
2015-06-22 10:52
2017.02.26
Ошибка list index bound(0)