在C ++ Builder中实现VirtualTreeView TVTDefaultAccessibleProvider [英] Implementing VirtualTreeView TVTDefaultAccessibleProvider in C++ Builder

查看:130
本文介绍了在C ++ Builder中实现VirtualTreeView TVTDefaultAccessibleProvider的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用VirtualStringTree添加可访问性支持时,需要在用途部分中包含单元 VirtualTrees.Accessibility

When using VirtualStringTree to add accessibility support it is required to include the unit VirtualTrees.Accessibility in the uses section. This works in Delphi.

在C ++ Builder中,这等效于包含 #include VirtualTrees.Accessibility.hpp 。但是包括include文件没有任何作用。

The equivalent of this in C++ Builder would be to include the #include "VirtualTrees.Accessibility.hpp". But including the include file doesn't have any effect.

我已经将问题追溯到 VirtualTrees.Accessibility.pas 文件,它执行几行代码以在Delphi中注册默认的可访问性提供程序,而hpp文件中没有此代码。因此,包含hpp的确包含类,而不包含注册提供​​程序的代码。

I've traced the problem to the VirtualTrees.Accessibility.pas file and it executes a few lines of code to register the default accessibility provider in Delphi while this code is absent from the hpp file. So including the hpp does include the class but not the code which registers the provider.

有问题的代码(在 VirtualTrees的末尾。) .pas 是这个):

The code in question (at the end of VirtualTrees.Accessibility.pas is this):

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.

我的问题-如何翻译或使用以上内容,以便可以从C ++ Builder获得支持包括 VirtualTrees.Accessibility.hpp 文件之后的情况如何?

My question - how do I translate or use the above so I can have accessibility support from C++ Builder as well after including the VirtualTrees.Accessibility.hpp file? A translation of the above into C++ would be very appreciated.

推荐答案

基于此链接的研究,并由Remy Lebeau回答:

Based on research from this link and answer by Remy Lebeau:

>初始化部分未调用

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

And the opened issue on VirtualTree GitHub:

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

我在这里分享一个解决方案,该解决方案可以通过以下任一方式实现:

I am sharing a solution here, how this might be achieved by either one of the following:

方法A

通过调用:

TVirtualTreeAccessibility :: RegisterDefaultAccessibleProviders() ;

在cpp文件中的某个位置,如Joachim Marder所建议的

somewhere in the cpp file, as suggested by Joachim Marder

方法B

通过添加:

#pragma链接 VirtualTrees.Accessibility

方法C

通过添加以下内容:

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

VirtualTrees.Accessibility.pas 源代码

这篇关于在C ++ Builder中实现VirtualTreeView TVTDefaultAccessibleProvider的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆