При работе с компонентом VirtualStringTree для добавления поддержки доступности необходимо включить в раздел uses модуль VirtualTrees.Accessibility. Это работает корректно в среде разработки Delphi. Однако, при использовании C++ Builder аналогичного результата достигать не удаётся, несмотря на включение файла #include "VirtualTrees.Accessibility.hpp".
Проблема заключается в том, что в файле VirtualTrees.Accessibility.pas присутствует код, отвечающий за регистрацию стандартного провайдера доступности, который не перешёл в соответствующий файл заголовков VirtualTrees.Accessibility.hpp. Включение файла заголовков позволяет подключить классы, но не выполняет код, необходимый для регистрации провайдера.
Рассмотрим код, который необходимо перенести:
var
DefaultAccessibleProvider: TVTDefaultAccessibleProvider;
DefaultAccessibleItemProvider: TVTDefaultAccessibleItemProvider;
MultiColumnAccessibleProvider: TVTMultiColumnAccessibleItemProvider;
initialization
if DefaultAccessibleProvider = nil then
begin
DefaultAccessibleProvider := TVTDefaultAccessibleProvider.Create;
GetAccessibilityFactory.RegisterAccessibleProvider(DefaultAccessibleProvider);
end;
if DefaultAccessibleItemProvider = nil then
begin
DefaultAccessibleItemProvider := TVTDefaultAccessibleItemProvider.Create;
GetAccessibilityFactory.RegisterAccessibleProvider(DefaultAccessibleItemProvider);
end;
if MultiColumnAccessibleProvider = nil then
begin
MultiColumnAccessibleProvider := TVTMultiColumnAccessibleItemProvider.Create;
GetAccessibilityFactory.RegisterAccessibleProvider(MultiColumnAccessibleProvider);
end;
finalization
GetAccessibilityFactory.UnRegisterAccessibleProvider(MultiColumnAccessibleProvider);
MultiColumnAccessibleProvider := nil;
GetAccessibilityFactory.UnRegisterAccessibleProvider(DefaultAccessibleItemProvider);
DefaultAccessibleItemProvider := nil;
GetAccessibilityFactory.UnRegisterAccessibleProvider(DefaultAccessibleProvider);
DefaultAccessibleProvider := nil;
end.
Для решения этой проблемы можно использовать один из следующих методов:
в одном из файлов .cpp, как предложено Joachim Marder.
Метод Б
Добавление директивы:
#pragma link "VirtualTrees.Accessibility"
в файл .cpp источника.
Метод В
Добавление следующей строки:
{$HPPEMIT '#pragma link "VirtualTrees.Accessibility"'}
в исходный файл VirtualTrees.Accessibility.pas.
Эти методы позволяют выполнить необходимый код для регистрации провайдера доступности, который был потерян при компиляции в C++ Builder.
Важно отметить, что для корректной работы кода доступности в C++ Builder может потребоваться дополнительная настройка, так как некоторые аспекты инициализации и завершения работы программы в C++ Builder отличаются от Delphi.
Примеры кода на Object Pascal (Delphi) показаны для лучшего понимания того, какие операции необходимо выполнить в C++ Builder. При необходимости, аналогичные операции должны быть реализованы в C++ коде, с учётом особенностей работы с объектами и функциями в C++ Builder.
Необходимо перенести код из модуля `VirtualTrees.Accessibility.pas` для обеспечения доступности компонента VirtualStringTree в среде C++ Builder, так как стандартное включение файла заголовков не выполняет необходимую регистрацию пров
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.