gpt4 book ai didi

c++ - 在 C++ Builder VCL 中自动化 RegisterClass

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:37:30 28 4
gpt4 key购买 nike

我们将 C++ Builder 用于其表单保存在数据库中的 EXE 外部的应用程序。应用代码为C++

这使我们无需重新编译即可修改表单和表单/操作。下面是一段代码,可以完成加载表单的工作。

 RegisterClass(__classid(TButton));
RegisterClass(__classid(TEdit));
RegisterClass(__classid(TRadioGroup));
RegisterClass(__classid(TGroupBox));
RegisterClass(__classid(TCheckBox));
RegisterClass(__classid(TRadioButton));
RegisterClass(__classid(TTimer));
RegisterClass(__classid(TListBox));
RegisterClass(__classid(TComboBox));
RegisterClass(__classid(TBitBtn));
RegisterClass(__classid(TSpeedButton));
RegisterClass(__classid(TMaskEdit));
RegisterClass(__classid(TProgressBar));

ms = new TMemoryStream;
ms2 = new TMemoryStream;

// Loading Module into Memory Stream
ms->Position = 0;
ms->LoadFromFile(Filename->Text);
ms->Position = 0;
pModule = new TForm(this);

// Reading Module Definition
if( !Inputisbin->Checked )
{
ms2->Position = 0;
ObjectTextToBinary(ms, ms2);
ms2->Position = 0;
ms2->ReadComponent(pModule);
}
else
ms->ReadComponent(pModule);


Log->Lines->Add("Displaying Module");
pModule->Show();

我很想知道是否有任何内置函数可以调用来注册所有引用的类。我想自己可以扫描所有对象的内存流或文件并为每个对象调用 RegisterClass,但希望有人知道已经这样做的函数。

因此,并非所有表单都使用所有这些类,因此最好只注册那些实际继承的类。

最佳答案

在我看来,您在此处采用的方法完全正确。多年前,我使用 Delphi2 采用了相同的方法,尽管我必须实现自己的类工厂和 ObjectToText/TextToObject 函数,因为 ReadComponent() 从未在 VCL 中出现过。

关于只注册必修类(class)的第二点,他们肯定只需要注册一次吗?确定一个类是否需要注册的开销将超过注册所有内容的成本。同样,我会保持原样。

关于c++ - 在 C++ Builder VCL 中自动化 RegisterClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1045232/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com