EnumAllWindowsOnActivateHint是TApplication的一个属性,根据帮助,应该在C ++ Builder - Codegear 2007中公开。事实并非如此。
我的困难在于我需要将它暴露给C ++,或者为我的应用程序将其设置为true。
因此,有不同的途径可以实现这一目标,以及我尝试过但可能做错的事情:
我无法升级到较新版本的Codegear,因为这会破坏应用程序所依赖的RTTI行为。
连连呢?解决方案?
答案 0 :(得分:6)
TApplication::EnumAllWindowsOnActivateHint
并未作为真正的C ++可访问属性引入。在C ++ Builder 2007中,它实现为Class Helper的属性而是:
TApplicationHelper = class helper for TApplication
private
procedure SetEnumAllWindowsOnActivateHint(Flag: Boolean);
function GetEnumAllWindowsOnActivateHint: Boolean;
...
public
property EnumAllWindowsOnActivateHint: Boolean read GetEnumAllWindowsOnActivateHint write SetEnumAllWindowsOnActivateHint;
...
end;
Class Helpers是特定于Delphi的功能,无法在C ++中访问。所以你必须使用一种解决方法。创建一个单独的.pas文件,公开C风格的函数以访问EnumAllWindowsOnActivateHint
属性,然后将该.pas文件添加到您的C ++项目中:
AppHelperAccess.pas:
unit AppHelperAccess;
interface
function Application_GetEnumAllWindowsOnActivateHint: Boolean;
procedure Application_SetEnumAllWindowsOnActivateHint(Flag: Boolean);
implementation
uses
Forms;
function Application_GetEnumAllWindowsOnActivateHint: Boolean;
begin
Result := Application.EnumAllWindowsOnActivateHint;
end;
procedure Application_SetEnumAllWindowsOnActivateHint(Flag: Boolean);
begin
Application.EnumAllWindowsOnActivateHint := Flag;
end;
end.
编译时,将生成一个C ++ .hpp头文件,您的C ++代码可以使用它来调用函数。例如
#include "AppHelperAccess.hpp"
void EnableEnumAllWindowsOnActivateHint()
{
Application_SetEnumAllWindowsOnActivateHint(true);
}
void DisableEnumAllWindowsOnActivateHint()
{
Application_SetEnumAllWindowsOnActivateHint(false);
}
void ToggleEnumAllWindowsOnActivateHint()
{
bool flag = Application_GetEnumAllWindowsOnActivateHint();
Application_SetEnumAllWindowsOnActivateHint(!flag);
}