Я написал в Delphi компонент расширенного текстового редактора (фиксированная ширина, подсветка синтаксиса и т. Д.), Использующий Windows API в сочетании с элементом TCanvas, и он прекрасно работает, за исключением одного: если я установил фокус на другой элемент управления внутри того же приложения, в котором также отображается символ каретки, такой как TEdit, украв фокус от компонента моего редактора, каретка нового редактора (такого как TEdit) не отображается; вместо этого каретка перемещается в моем компоненте редактора! Например, если я напишу символ в новом редакторе (TEdit), он будет отображаться, как и ожидалось, и каретка сместится вправо в моем компоненте. Что может вызвать это? Я подозреваю, что существует некоторый конфликт между обработкой фокусировки клавиатуры Win API и обработкой VCL. В моем компоненте редактора я использую CreateCaret в ответ на WM_SETFOCUS и DestroyCaret в ответ на WM_KILLFOCUS. Очевидно, проблема возникает только в том случае, если новый элемент управления редактирования находится в новом модальном окне.