Задача Delphi Focus, замеченная Карет - PullRequest
0 голосов
/ 28 февраля 2010

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

Ответы [ 2 ]

1 голос
/ 28 февраля 2010

Я нашел тривиальную ошибку в коде компонента. Мои извинения.

0 голосов
/ 28 февраля 2010

Моей первой мыслью было бы, что вы не получаете сообщение WM_KILLFOCUS. Я бы построил диагностику, чтобы сказать вам, происходит ли это или нет.

Я НЕ склонен использовать отладчик для такого рода проблем. Я считаю, что такие вещи, как изменение названия, работают лучше, когда я пытаюсь диагностировать такие взаимодействия.

...