Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1434957180
Djonik
2015-06-22 10:13
2017.02.26
idhttp json - авторизация qiwi


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


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


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


15-1458477503
MsGuns
2016-03-20 15:38
2017.02.26
Excel->MS SQL Server





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский