How to implement advanced custom properties in VB6 usercontrols?

北城余情 提交于 2021-01-28 05:59:11

问题


Sorry I don't know how to name it other than "advanced custom properties". If I know, I would search it first.

I am dealing with a legacy code using 3-rd party controls.

In VB6, When you drag that control onto the form, you can see all the properties supported by the control in the "Properties" window. Such as MarginLeft, MarginRight etc. etc.

That's no problem.

In the "Property" window, the top-most property is generally the "(Name)" field, which is the name of the control.

But the 3-rd party control I am using, has another two "fake properties" above "(Name)", which are "(About)" and "(Custom)".

When you click "(About)", there will be a dialog box showing the company info. When you click "(Custom)", there will be another dialog box showing more properties. These dialog boxes are shown in VB6.

In the "(Custom)" dialog box, you can modify normal properties (same as modifying directly in the Property window). You can do more. There are more properties that are not normal properties (at least you cannot find anything in the Property window).

When you save this form, for normal properties, everything are saved into .FRM file. E.g.,

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

However, for the "advanced properties" edited in the (Custom) dialog box, they are not saved in .FRM, they are saved in .FRX in binary format.

E.g., in (Custom) dialog box, you can edit a property called "Caption", which includes text of this caption, the font, the weight, the display style, and a lot of similar properties for Caption. In .FRM, it is something like,

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

All the text and related properties of Caption are saved in binary format in .FRX file.

Note that, there's no Caption property in the normal Property window, you can only edit it in the "(Custom)" dialog box.

My question is as follows,

  1. How to implement such a (Custom) dialog box that can be shown in VB6?

  2. How to let VB6's Property window display (About) and (Custom)?

  3. How to tell VB6 that Caption property shall not be displayed in Property window, but you can use directly in code as Control1.Caption = xxxx.frx:offset?

  4. How to tell VB6 that this Caption property shall be saved in .FRX, and how to tell VB6 the size of the data, so that VB6 can manages the offset automatically?

  5. How to load the data automatically via VB6 so that the correct values can be displayed in (Custom) dialog box?

  6. As far as I know, .frx formats are secrets, there are a lot of ppl digging into various .frx for standard controls such as Binary(images), List, and Text. I am curious how can a 3-rd party control utilizing .frx, shall the 3-rd party control define its own .frx format? Including for example, how many bytes in front for Length (or no length field at all, it's fixed length), how many bytes for style1, how many bytes for style2, etc.

Thanks a lot. If you know what proper name it is for this "advanced properties", just tell me the name and I can search myself.

I tried to search for advanced properties but didn't really get anything I want to know.


回答1:


The frx files are for binary or other non-basic data types. The frm will store the simple properties. What you need to do is to hook into the UserControl events WriteProperties and ReadProperties. You don't need to know where the backing storage is (frm vs frx)., you just need to access the PropBag to read and write your data.

Google is your friend to find the documentation:

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

Or additional information on the topic:

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

Good luck!



来源:https://stackoverflow.com/questions/46657222/how-to-implement-advanced-custom-properties-in-vb6-usercontrols

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!