2017-10-10 139 views
3

对不起,我不知道如何命名它,而不是“高级自定义属性”。如果我知道,我会先搜索它。如何在VB6 usercontrols中实现高级自定义属性?

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

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

这没问题。

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

但是我使用的第三方控件在“(名称)”之上又有两个“假性质”,分别是“(关于)”和“(自定义)”。

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

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

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

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

然而,对于“高级属性”中的(自定义)对话框编辑,他们不会被保存在.FRM,他们以二进制格式保存.FRX。例如,在(自定义)对话框中,您可以编辑名为“Caption”的属性,其中包括此标题的文本,字体,权重,显示样式以及Caption的许多类似属性。在.FRM,它是一样的东西,

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

所有文字和标题的相关属性都保存在.frx文件的二进制格式。

请注意,在常规“属性”窗口中没有标题属性,只能在“(自定义)”对话框中对其进行编辑。

我的问题是这样的,

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

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

  3. 如何知道VB6 Caption属性不应该显示在属性窗口中,但您可以直接在代码中使用Control1.Caption = xxxx.frx:offset

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

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

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

感谢。如果你知道这个“高级属性”是什么名字,只要告诉我名字,我可以搜索自己。

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

+0

我想你要找的是[属性页](https://msdn.microsoft.com/en-us/library/aa262311(v=vs.60).aspx) –

+0

嗨,谢谢。这就是我需要的。我检查了属性页面,一切正常,除了我不知道如何定义一个属性的值被保存到“FRX”文件中,就像图像/图标属性一样。 – user534498

+1

我可能是错的,但我认为将ASCII值写入.frm文件和.frx文件的二进制值的决定由VB自己内部控制,但是可以想到“属性包”这个短语,并且可能有所帮助。我没有亲身体验编写active-x控件的经验,所以我只依赖这里的记忆。 –

回答

1

frx文件适用于二进制或其他非基本数据类型。 frm将存储简单的属性。你需要做的是钩住UserControl事件WriteProperties和ReadProperties。您不需要知道后备存储的位置(frm vs frx),您只需访问PropBag即可读取和写入数据。

谷歌是你的朋友找到文档:

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

祝你好运!

相关问题