【问题标题】:Implementing VirtualTreeView TVTDefaultAccessibleProvider in C++ Builder在 C++ Builder 中实现 VirtualTreeView TVTDefaultAccessibleProvider
【发布时间】:2020-05-23 16:21:27
【问题描述】:

当使用 VirtualStringTree 添加辅助功能支持时,需要在 uses 部分中包含单元 VirtualTrees.Accessibility。这在 Delphi 中有效。

在 C++ Builder 中相当于包含 #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++ Builder 获得可访问性支持?将上述内容翻译成 C++ 将不胜感激。

【问题讨论】:

标签: delphi accessibility c++builder virtualtreeview


【解决方案1】:

基于此链接的研究和 Remy Lebeau 的回答:

The initialization part is not called

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源代码中

【讨论】:

    猜你喜欢
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多