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

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

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

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


person Lawrence Barsanti    schedule 31.12.2009    source источник
comment
Какую оболочку для библиотеки Scintilla вы используете?   -  person mghie    schedule 31.12.2009
comment
Я не использую обертку. CreateWindowEx для его создания и SendMessage для связи с ним.   -  person Lawrence Barsanti    schedule 31.12.2009
comment
Вероятно, было бы неплохо создать для него собственный класс-оболочку. Ему не нужно раскрывать какие-либо свойства или методы. Используйте TStaticText или TEdit в качестве примера того, как заставить потомок TWinControl вызывать CreateWindowEx с правильным именем класса окна. Таким образом, вы получаете множество бесплатных вещей, таких как выравнивание, изменение размера и табуляция.   -  person Rob Kennedy    schedule 31.12.2009


Ответы (1)


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

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

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

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

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

person Community    schedule 04.01.2010