Есть ли простой способ разрешить вкладки между элементами управления не-VCL и VCL в форме Delphi?

У меня есть форма Delphi с кучей элементов управления VCL, таких как TButton и TCheckBox, и экземпляр текстового редактора Scintilla. Я хочу иметь возможность входить и выходить из текстового редактора, но похоже, что вкладки обрабатываются библиотекой VCL, а не Windows.

Я перешагнул через код, и похоже, что вкладки обрабатываются методами SelectNext и FindNextControl класса TWinControl. Эти методы работают с объектами TWinControl, но текстовый редактор не происходит от TWinControl, как TButton и TCheckbox.

Есть ли простой способ разрешить табуляцию между не VCL и VCL?

1 ответ

Решение

(сделал это вики-ответом, потому что Роб совершенно прав в своих комментариях выше, это просто извергает его)

Обработка клавиатуры для специальных символов / клавиш обрабатывается VCL довольно особым образом, и обход / расширение этого напрямую через Win API, безусловно, выполнимо, но нетривиально.

Было бы так же легко и откровенно более гибким в долгосрочной перспективе, если вы создадите пользовательскую оболочку компонента VCL вокруг элементов управления (используйте источник VCL в качестве руководства), на самом деле это не так сложно (возможно, немного утомительно), но Отключение будет огромным с точки зрения ремонтопригодности и повторного использования.

Редактировать:

И, конечно, вы можете просто использовать этот бесплатный Delphi Wrapper для редактора Scintilla.

Другие вопросы по тегам