我有一个Active Form,我几年前制作的,编译为ocx。它安装在工具选项板上。
我在每个主应用程序中只使用了一个实例,并且运行正常。
现在我需要在同一主应用程序中使用此活动表单的许多实例。所以我将其中几个从工具托盘中删除到我的主应用程序中。但无论我使用哪种活动表单(它都有我打开的内置表单),它都会显示相同的实例。这不是我想要的。
我无法弄清楚活动表单是否应该以不同的方式创建,或者我是否应该使用它与主应用程序不同。
活动表单是使用c ++ builder XE构建的,主应用程序是使用XE6构建的。
这是我创建实例的方式:
var areEqual = Vector.Equals(vBytes, mask);
var negation = Vector.Negate(areEqual);
var count = Vector.Dot(negation, Vector<byte>.One);
在这里我打开不同的实例:
print()
为了进行测试,将整数i添加到标签中 - &gt; Init()。 TMyActX具有显示标签的内部形式。如果我从(使用任何创建的实例)打开它,标签显示&#34; 0 1 2 3 4 ...&#34;。因此,我得出结论 - &gt; Init()调用相同的实例,无论我用什么创建的实例打开它,都会打开相同的表单。
如果我在设计时将两个实体放到我的主窗体上,也会发生同样的事情。如果我打开ocx-form,会显示相同的Label。
我使用ocx的原因是,ocx是支付解决方案的一部分,通过外部组织认证。所以如果可能的话,我不想让它搞乱。但是我可以访问它的代码,并且为了测试我可以改变它。
答案 0 :(得分:0)
如果您可以访问表单的TForm类,那么只需在运行时创建新实例,如:
TForm *win[10];
for (int i=0;i<10;i++) win[i]=new TForm(this);
其中this
是指向IDE创建的父 VCL 表单的指针。这对我有用,但我不使用ocx而是每个窗口包含3个文件(*.h,*.cpp,*.dfm)
但是我绑定了BDS2006所以在更新版本的构建器上可能会有点不同......
不要忘记,为了完成这项工作,您不能在表单中使用全局变量,并且关闭应用程序上的win[]
的propper close / destroy方法。
您可以通过指针访问您的窗口(显示或隐藏它们或其他),您也应该处理窗口的手动关闭(因此您不会访问后面的死指针)