Форум: "Прочее";
Текущий архив: 2017.02.26;
Скачать: [xml.tar.bz2];
ВнизКак сделать, чтобы 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.001 c