-
В более менее свежих версиях Delphi есть компонент TTouchKeyboard, который представляет собой виртуальную клавиатуру.
Если компонент, куда нужно вводить текст находится на той же форме, что и TTouchKeyboard - то все хорошо.
Но если делать "плавающую" виртуальную клавиатуру в отдельной форме (форма 1), то возникает проблема. Устанавливаем фокус на компонент для ввода (он находится на форма 2). Потом нажимаем на клавишу виртуальной клавиатуры - и фокус уходит на форма 1. При этом символ не вводится в компонент, который находится на форма 2.
Можно сделать как-то, чтобы фокус не уходил на форма 1, где находится виртуальная клавиатура? А оставался на компоненте для ввода.
-
> не уходил на форма 1, ShowWindow(theWindowHandle, SW_SHOWNOACTIVE);
но вообще, я бы виртуальную клавиатуру от панели бы делал/наследовал (если компонент).
-
Для формы с клавиатурой:
procedure TForm1.CreateParams(var Params: TCreateParams); begin inherited; Params.ExStyle := Params.ExStyle or WS_EX_NOACTIVATE; end;
-
> ShowWindow(theWindowHandle, SW_SHOWNOACTIVE);
У меня главная форма, на ней лежит TTouchKeyboard Для главной формы делаю:
ShowWindow(Self.Handle, SW_HIDE); ShowWindow(Self.Handle, SW_SHOWNOACTIVATE);
это не помогает
> Для формы с клавиатурой:
хорошее решение, но есть прикол. Это действует для всех ЧУЖИХ приложений. То есть, таким образом легко вводить символы в Excel. Но если у тебя две формочки одного приложения, то фокус все равно уходит на форму с клавиатурой.
Подозреваю, что пробрасывается какое-то VCL сообщение, но точно разобраться я не смог :(
-
> У меня главная форма для главной лучший вариант DayGaykin © (21.03.16 17:13) [2] а не пере показ...
> то фокус все равно уходит на форму с клавиатурой. ???
> Подозреваю, что пробрасывается какое-то VCL сообщение подозреваю наличие 17й строки и ошибки в ней.
-
> > то фокус все равно уходит на форму с клавиатурой. > ???
а что непонятно?
Имеем форму 1 и на ней клавиатура TTouchKeyboard. Имеем форму 2, на которой находится контрол для ввода.
Если форма 2 - это чужое приложение (в том числе дельфовое), то все работает. При клике по клавиатуре на форме 1 фокус эта форма 1 не получает.
Если же в одном приложении открыть форму 1 и форму 2, то при клике на клавиатуру, находящуюся на форме 1 - она получает фокус все равно, хотя у формы 1 выставлен WS_EX_NOACTIVATE
-
не делай Show делай ShowModal или вторую форму тоже сделай не активируемой...
а лучше логику меняй, не делай главным то что логичнее дополнением.
-
Могу ошибаться, но надо бы поперехватывать сообщение WM_MOUSEACTIVATE
-
> Могу ошибаться, но надо бы поперехватывать сообщение WM_MOUSEACTIVATE
всё сработало! Спасибо!
|