在C ++ Builder中实现VirtualTreeView TVTDefaultAccessibleProvider

问题描述 投票:0回答:1

使用VirtualStringTree添加可访问性支持时,需要在VirtualTrees.Accessibility部分中包含单元uses。这在Delphi中有效。

C ++ Builder中的等效项是包含#include "VirtualTrees.Accessibility.hpp"。但是包含include文件没有任何作用。

我已将问题追溯到VirtualTrees.Accessibility.pas文件,并且在hpp文件中缺少此代码的同时,它执行了几行代码以在Delphi中注册默认可访问性提供程序。因此,包含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个回答
0
投票

基于此链接的研究结果,Remy Lebeau的回答:

The initialization part is not called

以及VirtualTree GitHub上的未解决问题:

https://github.com/Virtual-TreeView/Virtual-TreeView/issues/951

我在这里分享一个解决方案,可以通过以下任何一种方法来实现:

方法A

通过致电:

TVirtualTreeAccessibility::RegisterDefaultAccessibleProviders();

根据Joachim Marder的建议,在cpp文件中的某个位置

方法B

通过添加:

#pragma link "VirtualTrees.Accessibility"

在cpp源文件中]

方法C

通过添加类似内容:

{$HPPEMIT '#pragma link "VirtualTrees.Accessibility"'}

VirtualTrees.Accessibility.pas源代码中

© www.soinside.com 2019 - 2024. All rights reserved.