Конференция "Прочее" » Как сделать, чтобы TTouchKeyboard не получала фокус
 
  • ttUser © (21.03.16 15:47) [0]
    В более менее свежих версиях Delphi есть компонент TTouchKeyboard, который представляет собой виртуальную клавиатуру.

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

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

    Можно сделать как-то, чтобы фокус не уходил на форма 1, где находится виртуальная клавиатура? А оставался на компоненте для ввода.
  • sniknik © (21.03.16 16:44) [1]
    > не уходил на форма 1,
    ShowWindow(theWindowHandle, SW_SHOWNOACTIVE);

    но вообще, я бы виртуальную клавиатуру от панели бы делал/наследовал (если компонент).
  • DayGaykin © (21.03.16 17:13) [2]
    Для формы с клавиатурой:

    procedure TForm1.CreateParams(var Params: TCreateParams);
    begin
     inherited;
     Params.ExStyle := Params.ExStyle or WS_EX_NOACTIVATE;
    end;
  • ttUser © (21.03.16 17:32) [3]

    > ShowWindow(theWindowHandle, SW_SHOWNOACTIVE);

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

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

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


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

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

    Подозреваю, что пробрасывается какое-то VCL сообщение, но точно разобраться я не смог :(
  • sniknik © (21.03.16 18:23) [4]
    > У меня главная форма
    для главной лучший вариант DayGaykin ©   (21.03.16 17:13) [2] а не пере показ...

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

    > Подозреваю, что пробрасывается какое-то VCL сообщение
    подозреваю наличие 17й строки и ошибки в ней.
  • ttUser © (21.03.16 18:33) [5]

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

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

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

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

    Если же в одном приложении открыть форму 1 и форму 2, то при клике на клавиатуру, находящуюся на форме 1 - она получает фокус все равно, хотя у формы 1 выставлен WS_EX_NOACTIVATE
  • sniknik © (21.03.16 18:56) [6]
    не делай Show делай ShowModal или вторую форму тоже сделай не активируемой...

    а лучше логику меняй, не делай главным то что логичнее дополнением.
  • Dimka Maslov © (21.03.16 19:25) [7]
    Могу ошибаться, но надо бы поперехватывать сообщение WM_MOUSEACTIVATE
  • ttUser © (22.03.16 11:27) [8]

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

    всё сработало!
    Спасибо!
 
Конференция "Прочее" » Как сделать, чтобы TTouchKeyboard не получала фокус
Есть новые Нет новых   [134434   +28][b:0][p:0]