如何在 VB6 用户控件中实现高级自定义属性?

How to implement advanced custom properties in VB6 usercontrols?

抱歉,除了 "advanced custom properties",我不知道如何命名它。如果我知道,我会先搜索它。

我正在处理使用第 3 方控件的遗留代码。

在VB6中,当你将该控件拖到窗体上时,你可以在"Properties"window中看到该控件支持的所有属性。比如MarginLeft, MarginRight等等等等

没问题。

在"Property"window中,最上面的属性一般是“(Name)”字段,也就是控件的名称。

但是我用的第3方控件,在“(Name)”上面还有两个"fake properties",分别是“(About)”和“(Custom)”。

当您单击“(关于)”时,将出现一个显示公司信息的对话框。当您单击“(自定义)”时,将出现另一个显示更多属性的对话框。这些对话框在 VB6 中显示。

在“(自定义)”对话框中,您可以修改普通属性(与直接在属性 window中修改相同)。你可以做更多。还有更多不是普通属性的属性(至少你在 属性 window 中找不到任何东西)。

保存此表单时,对于正常属性,所有内容都保存到 .FRM 文件中。例如,

  Control1.MarginLeft = 5
  Control1.Text = "I am a control"

但是,在(自定义)对话框中编辑的"advanced properties",它们并没有保存在.FRM中,而是以二进制格式保存在.FRX中。

例如,在(自定义)对话框中,您可以编辑一个名为"Caption"的属性,其中包括该字幕的文本、字体、粗细、显示样式等等Caption 的类似属性。在 .FRM 中,它类似于

   Control1.Caption = "frmForm1.frx":013F

Caption的所有文本和相关属性都以二进制格式保存在.FRX文件中。

注意,普通属性window中没有Caption属性,只能在“(自定义)”对话框中编辑。

我的问题如下,

  1. 如何实现这样一个可以在VB6中显示的(自定义)对话框?

  2. 如何让VB6的属性window显示(About)和(Custom)?

  3. 如何告诉VB6在属性中不显示Caption属性window,但可以直接在代码中使用Control1.Caption = xxxx.frx:offset ?

  4. 如何告诉VB6这个Caption 属性应该保存在.FRX中,以及如何告诉VB6数据的大小,以便VB6可以自动管理偏移量?

  5. 如何通过VB6自动加载数据,以便在(自定义)对话框中显示正确的值?

  6. 据我所知,.frx 格式是秘密,有很多人正在研究各种 .frx 标准控件,例如 Binary(images)、List 和 Text。我很好奇第 3 方控件如何使用 .frx,第 3 方控件是否应定义其自己的 .frx 格式?包括比如Length在前面多少个字节(或者根本没有长度字段,是定长),style1多少个字节,style2多少个字节等等

非常感谢。如果你知道这个"advanced properties"的专有名称,请告诉我名称,我可以自己搜索。

我尝试搜索高级属性,但没有真正得到我想知道的任何信息。

frx 文件用于二进制或其他非基本数据类型。 frm 将存储简单的属性。您需要做的是连接到 UserControl 事件 WriteProperties 和 ReadProperties。你不需要知道后备存储在哪里(frm vs frx),你只需要访问 PropBag 来读写你的数据。

Google是你找文档的朋友:

https://msdn.microsoft.com/en-us/library/aa242140(v=vs.60).aspx

或有关该主题的其他信息:

http://www.vbforums.com/showthread.php?365735-Classic-VB-How-do-the-ReadProperties-and-WriteProperties-work-(PropertyBags)&s=3cfbd675928ad1eb94f68fbfb13ccd88&p=3672781&viewfull=1#post3672781

祝你好运!