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

时间:2017-10-10 01:12:36

标签: com vb6 controls activex

抱歉,除了“高级自定义属性”之外,我不知道如何命名。如果我知道,我会先搜索它。

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

在VB6中,将该控件拖到窗体上时,可以在“属性”窗口中看到该控件支持的所有属性。如MarginLeft,MarginRight等等。

这没问题。

在“属性”窗口中,最顶层的属性通常是“(名称)”字段,它是控件的名称。

但是我正在使用的第三方控制,在“(名称)”之上还有另外两个“虚假属性”,即“(关于)”和“(自定义)”。

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

在“(自定义)”对话框中,您可以修改常规属性(与在“属性”窗口中直接修改相同)。你可以做得更多。还有更多属性不是普通属性(至少在“属性”窗口中找不到任何内容)。

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

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

但是,对于在(自定义)对话框中编辑的“高级属性”,它们不保存在.FRM中,它们以二进制格式保存在.FRX中。

例如,在(自定义)对话框中,您可以编辑名为“标题”的属性,其中包括此标题的文本,字体,重量,显示样式以及标题的许多类似属性。在.FRM中,它就像是,

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

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

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

我的问题如下,

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

  2. 如何让VB6的属性窗口显示(关于)和(自定义)?

  3. 如何告诉VB6标题属性不会显示在属性窗口中,但您可以直接在代码中使用Control1.Caption = xxxx.frx:offset

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

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

  6. 据我所知,.frx格式是秘密,对于标准控件,如二进制(图像),列表和文本,有很多人正在挖掘各种.frx。我很好奇第三方如何控制利用.frx,第三方控制是否应该定义自己的.frx格式?包括例如,前面有多少字节用于Length(或者根本没有长度字段,它是固定长度),style1有多少字节,style2有多少字节等等。

  7. 非常感谢。如果您知道这个“高级属性”的名称是什么,请告诉我姓名,我可以自己搜索。

    我试图搜索高级属性,但没有真正得到我想知道的任何内容。

1 个答案:

答案 0 :(得分:1)

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

祝你好运!