使用 VirtualStringTree 添加辅助功能支持时,需要在uses
部分包含单元VirtualTrees.Accessibility
。这在德尔福有效。
在C++生成器中与此等效的是包含#include "VirtualTrees.Accessibility.hpp"
。但是包含包含文件没有任何效果。
我已经将问题追溯到VirtualTrees.Accessibility.pas
文件,它执行几行代码以在 Delphi 中注册默认的可访问性提供程序,而 hpp 文件中没有此代码。因此,包括 hpp 确实包括类,但不包括注册提供程序的代码。
有问题的代码(在VirtualTrees.Accessibility.pas
末尾是这样的(:
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.
我的问题 - 如何翻译或使用上述内容,以便在包含VirtualTrees.Accessibility.hpp
文件后也可以从C++生成器获得辅助功能支持?如能将上述内容翻译成C++,将不胜感激。
基于此链接的研究和Remy Lebeau的回答:
不调用初始化部分
以及 VirtualTree GitHub 上打开的问题:
https://github.com/Virtual-TreeView/Virtual-TreeView/issues/951
我在这里分享一个解决方案,如何通过以下任一方法实现这一目标:
方法 A
通过致电:
TVirtualTreeAccessibility::RegisterDefaultAccessibleProviders();
在 cpp 文件中的某个地方,正如 Joachim Marder 所建议的那样
方法 B
加入:
#pragma link "VirtualTrees.Accessibility"
在 CPP 源文件中
方法 C
通过添加类似以下内容的内容:
{$HPPEMIT '#pragma link "VirtualTrees.Accessibility"'}
在VirtualTrees.Accessibility.pas
源代码