问题描述
使用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:
我在这里分享一个解决方案,该解决方案可以通过以下任一方式实现:
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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!