Delphi: модальная форма от dll до всплеска
Итак, у меня есть эта виртуальная клавиатура...
Он находится внутри dll и основан на модальной форме StayOnTop. Он вызывается функцией, которая возвращает WideString с набранным текстом. Эта виртуальная клавиатура имеет собственный TEdit, где пользователь пишет и видит, что он пишет.
Требуемое поведение заключается в том, чтобы они оставляли форму KB в верхней части и с фокусом, пока не будут нажаты клавиши Esc или Enter.
Один из вызовов этой клавиатуры происходит в событии OnShow основной формы, поэтому он не виден к моменту первого вызова клавиатуры.
Это всегда происходило до сих пор.
Я создал всплывающую форму, чтобы направлять пользователя по различным шагам, которые происходят до момента фактической загрузки основной формы: загрузка скина, загрузка плагина, инициализация БД и т. Д.
Заставка появляется, как только выполняется DataModule OnCreate, и закрывается на OnActivate основной формы. Таким образом, эта всплывающая форма не является StayOnTop - она не обязательна, так как она закрывается прямо в тот момент, когда появляется основная форма.
Где-то посередине появляется клавиатура, поэтому пользователь может ввести некоторые необходимые данные.
По моему мнению, клавиатура должна захватывать фокус, так как это модальное окно, но правда в том, что всплывающая форма имеет фокус, пока я не нажму на клавиатуру, чего я хочу избежать.
Если всплывающая форма вызывается до клавиатуры, ни модальные, ни StayOnTop могут кто-нибудь сказать мне, почему она остается в фокусе и как ее избежать, если это возможно.
PS: Я нашел в SO другие вопросы, касающиеся подобных проблем, но, оказывается, все наоборот: желание формы StayOnTop потерять фокус на основной. Это не то, что мне нужно.
1 ответ
Ну, я решил свою проблему. И это было просто...
Я просто добавил Application.ProcessMessages прямо перед вызовом клавиатуры.
Фокус теперь переходит на клавиатуру до тех пор, пока она видна.