【问题标题】:How to implement advanced custom properties in VB6 usercontrols?如何在 VB6 用户控件中实现高级自定义属性?
【发布时间】:2018-03-21 07:10:40
【问题描述】:

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

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

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

没问题。

在“属性”窗口中,最顶层的属性一般是“(名称)”字段,即控件的名称。

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

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

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

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

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

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

例如,在(自定义)对话框中,您可以编辑一个名为“Caption”的属性,其中包括该标题的文本、字体、粗细、显示样式以及许多与 Caption 类似的属性。在 .FRM 中,类似于

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

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

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

我的问题如下,

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

  2. 如何让VB6的Property窗口显示(About)和(Custom)?

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

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

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

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

非常感谢。如果您知道这个“高级属性”的专有名称,请告诉我名称,我可以自行搜索。

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

【问题讨论】:

  • 我想你要找的是property pages
  • 嗨,谢谢。这就是我需要的。我检查了属性页,一切正常,除了我不知道如何定义一个属性,其值保存到“FRX”文件中,就像图像/图标属性一样。
  • 我可能是错的,但我认为将 ASCII 值写入 .frm 文件并将二进制值写入 .frx 文件的决定是由 VB 本身在内部控制的,但是“property bag”这个短语来了记住,可能会有所帮助。我没有写active-x控件的第一手经验,所以这里只靠记忆。
  • 无论属性存储在 frm 还是 frx 中,为什么对您的程序很重要?

标签: com vb6 controls activex


【解决方案1】:

frx 文件用于二进制或其他非基本数据类型。 frm 将存储简单的属性。您需要做的是挂钩到 UserControl 事件 WriteProperties 和 ReadProperties。您不需要知道后备存储在哪里(frm 与 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

祝你好运!

【讨论】:

    猜你喜欢
    • 2012-03-08
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    相关资源
    最近更新 更多