在C++生成器中实现 VirtualTreeView TVTDefaultAccessProvider



使用 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源代码

相关内容

  • 没有找到相关文章

最新更新