Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Как сделать не модальное окно при ShowModal?


Mik ©   (29.12.16 16:50

Есть относительно стандартное Delphi XE приложение (VCL). В нем некоторые формы вызываются через .ShowModal

Для клиентов с тач экранами сделали виртуальную клавиатуру на основе компонента TTouchKeyboard. Форма без заголовка, на всю поверхность которой растянут TTouchKeyboard. Форма плавает поверх всех окон, по определенным причинам виртуальную клавиатуру windows использовать нельзя, нужно свою.

НО! Если какую-то форму вызвать через .ShowModal, то рядом плавающая виртуальная клавиатура перестает работать.  Кнопки не нажимаются, события не приходят.

Известно, что ShowModal инициализирует свой цикл выборки сообщений, отличный от Application.Run. Но не могу разобраться, почему форме с клавиатурой не приходит никаких сообщений? В этом новом цикле выборки сообщений нет никаких сообщений, адресованных окну с клавиатурой, по какой причине? Не понимаю.
Я планировал как-то прокидывать через Application.OnMessage может быть сообщения или типа того, но Windows, видимо, просто не посылает сообщения любым окнам приложения, кроме модального. Почему? Как обойти?


Dimka Maslov ©   (29.12.16 19:15[1]

Можно сделать виртуальную клавиатуру модальным окном и посылать сообщения в другие окна.


Mik ©   (29.12.16 22:33[2]

вызвать окно клавиатуры через .ShowModal?

А что толку, ведь если вызвать потом любое другое окно через еще один .ShowModal, то опять же окно клавиатуры заблокируется. К тому же в этом подходе мы заблокируем главное окно приложения сразу в виду показа клавиатуры в модальном режиме.


Dimka Maslov ©   (30.12.16 10:22[3]

А что если показывать виртуальную клавиатуру не постоянно, а когда она действительно нужна? Или сделать виртуальную клавиатуру отдельным процессом?


Германн ©   (03.01.17 02:58[4]


> Mik ©   (29.12.16 22:33) [2]
>
> вызвать окно клавиатуры через .ShowModal?
>
> А что толку, ведь если вызвать потом любое другое окно через
> еще один .ShowModal, то опять же окно клавиатуры заблокируется.
>  К тому же в этом подходе мы заблокируем главное окно приложения
> сразу в виду показа клавиатуры в модальном режиме.

Эх, где мои надцать лет?
Когда я работал с TouchSreen'ами. Уже и исходников никаких не осталось.
Одно только возникает в памяти. Модальность может быть разной! AppModal или SysModal.


Dimka Maslov ©   (03.01.17 12:12[5]


> Модальность может быть разной! AppModal или SysModal.


Возможность создавать системно-модальные окна была ликвидирована, если я не ошибаюсь, вместе с Windows 3.11?


KSergey ©   (04.01.17 16:08[6]

1. Размещать компонент вирт. клавиатуры на модальной форме.
Интерфейсно не прикольно, но можно обыграть так, что "пользователь и не заметит".

2. Найти в VCL код ShowModal. Он в общем-то простой и явно написанный, из него видно, как эта модальность сделана, какие сообщения отбрасываются, чтобы другие формы не реагировали на ввод. В этот цикл добавить обработку сообщений (видимо мыши?) для окна виртуальной клавиатуры. (технически возможно есть смысл сделать свой базовый класс для модальных форм, кода скопировать подхаченный код ShowModal, если не удастся его перекрыть- сделать свой метод с другим названием, вызывать именно его).
Вот только не придётся ли бороться с потерей фокуса модальной формой в таком варианте?


Германн ©   (05.01.17 02:38[7]


> Dimka Maslov ©   (03.01.17 12:12) [5]
>
>

Да. Ты прав...
Но тогда ты прав и в
> сделать виртуальную клавиатуру отдельным процессом

По-моему так правильнее всего.


дон трумп ©   (11.01.17 11:50[8]

Удалено модератором


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо