Это странно: Это ситуацияСтранно WM_KEYDOWN поведение с THtmlEdit
Приложение строит форму редактирования во время выполнения из документа XML. Дизайн UI/UX таков, что есть три уровня вложенных TTabControls, а для окончательного (самого низкого) уровня TTabItem создается во время выполнения. У этого есть TVerScrollBox, который сам содержит элемент управления сеткой столбца и что (наконец!) Содержит THtmlEditor.
Проблема заключается в том, что когда элементы управления сконструированы и содержимое загружено, THtmlEdit изначально игнорирует keydown. Он будет реагировать на события мыши, каретку можно позиционировать. Переключаясь на другую вкладку верхнего уровня или удаляясь от всего приложения и обратно, вылечитесь от проблемы, и редактор отвечает на сообщения с клавиатуры.
Я попытался поставить точку останова в procedure THtmlEditor.KeyDown()
... и затем отслеживать резервную цепочку вызовов. Кажется, что ничего не происходит по-другому. Я уделил особое внимание фокусу ввода, явно назвав Editor.SetFocus, хотя это, по-видимому, уже называется ...
Я попытался поставить условную точку останова в function TPlatformWin.HandleMessage: Boolean;
... и мое единственное наблюдение заключается в том, режим работы, вызов DispatchMessage(Msg)
не поступает в редактор или его родительскую форму.
Что я могу попробовать дальше? Кто-нибудь видел это поведение (и исправил его)?
EDIT:
Детали я не упомянул - не думать об этом - это то, что для состояния ошибки, чтобы показать, контроль сосредоточены перед THmtlEditor является TWebBrowser. Если я установлю фокус на TEdit после TWebBrowser и , то в THtmlEditor, похоже, сработает.
Grrr!
Возможно, у вас есть свойство KeyPreview', равное 'true' в вашей форме.? Это может привести к тому, что сообщение 'wm_keydown 'уже обрабатывается вашей формой до того, как оно достигнет вашего HTML-редактора.Также есть ли у вас какой-то другой элемент управления, который может принимать входной сигнал клавиатуры, например, в поле «Редактировать»? Если у вас есть чек, чтобы проверить, не может ли ваше нажатие клавиши не обрабатываться этим элементом управления. – SilverWarior
@SilverWarrior Это приложение Firemonkey, и я не думаю, что есть свойство KeyPreview. –