最近写一个程序,要求可按照用户的某些要求自动生成vb代码(生成一个完整工程),遇到几个问题向高手请教:
1.在所生成的frm文件中,有可能要用到一些非标准控件(肯定也是vb安装后带来的),这些控件的使用和注册表有关。例如,我在form1中用了一个richtextbox控件,保存后用记事本打开form1.frm则可看到“Object = "{3B7C8863-D78F-101B-B9B5-04021C009402}#1.2#0"; "RICHTX32.OCX"”,其中的“3B7C8863-D78F-101B-B9B5-04021C009402”应为该控件在注册表中的位置。我看了几台计算机,此控件在注册表中的位置都是“3B7C8863-D78F-101B-B9B5-04021C009402”。但不知windows是否能保证所有计算机的每一个控件的注册位置都相同?望知道的朋友能给以解答?
2.我生成的frm文件中有可能包含某些图像信息,例如我为某一form设置图标,则会生成同名frx文件,不知写此文件应遵循什么规则?另外richtextbox、combobox等控件也可能有些信息存入frx文件,又应遵循什么规则?还有哪些控件有可能要写frx文件?
问题都相对较偏,希望知道的朋友能给以解答,谢谢!
1.在所生成的frm文件中,有可能要用到一些非标准控件(肯定也是vb安装后带来的),这些控件的使用和注册表有关。例如,我在form1中用了一个richtextbox控件,保存后用记事本打开form1.frm则可看到“Object = "{3B7C8863-D78F-101B-B9B5-04021C009402}#1.2#0"; "RICHTX32.OCX"”,其中的“3B7C8863-D78F-101B-B9B5-04021C009402”应为该控件在注册表中的位置。我看了几台计算机,此控件在注册表中的位置都是“3B7C8863-D78F-101B-B9B5-04021C009402”。但不知windows是否能保证所有计算机的每一个控件的注册位置都相同?望知道的朋友能给以解答?
2.我生成的frm文件中有可能包含某些图像信息,例如我为某一form设置图标,则会生成同名frx文件,不知写此文件应遵循什么规则?另外richtextbox、combobox等控件也可能有些信息存入frx文件,又应遵循什么规则?还有哪些控件有可能要写frx文件?
问题都相对较偏,希望知道的朋友能给以解答,谢谢!
*.frx由VBIDE集成编译环境自动生成.似乎属于ActiveX控件都回写入*.frx文件.
Private Sub Form_Load()
Set Me.Icon = LoadPicture(App.Path & "1.ico")
End Sub
Begin RichTextLib.RichTextBox aaaa
Height = 615
Left = 1980
TabIndex = 6
Top = 2400
Width = 1965
_ExtentX = 3466
_ExtentY = 1085
_Version = 393217
Enabled = -1 'True
TextRTF = $"Form1.frx":0000
End
也会导致frx文件的产生
一般是Windows,system32和exe所在文件夹三处
你在使用的时候可以不考虑这些
打包(也就是制作安装程序.脱离VB)的时候有选项用来设置
Visual Modeler 就是使用插件的形式自动生成代码的
lMaxLen as long '前四字节为这一段数据的总长度,不包括这四字节
lUnKnow as long '未知的四字节值,没找出规律.
lPicLen as long '图片文件的长度
bytePic() as byte '这里就是整个图片的内容
end type
每个图片就是一段这样的内容,你可以用上面的结构直接从FRX里读出图片.其它类型的二进制值就自己分析一下吧,FRX文件未加密,只是一个打包而已.不过有可能类型比较多,有够你分析的........整完了记得分享一下,嘿嘿.
只不过默认文本是空白,你还是可以在 Form_Load 中进行设置的。
但是,如果你把源代码重新编译一次,新生成的 .ocx 的 CLSID 肯定跟原来的不一样。
据说重复机率好象是(记不清楚了,以前在哪见过) 40万亿分之一。
要是遇到与当前系统中的某个 CLSID 重复了,重新生成一个就行了。
第二次生成还出现重复(也可以再生成一次呀)?恐怕比你连续中5期双色球头等奖的可能性还小。
2)只复制 a.ocx:
a)如果不注册,则不可用。
b)如果注册,a.ocx 和 b.ocx 的注册信息除了不同的 CLSID 还有相同的 ProgID,后注册的将覆盖先注册的,先注册的不可用。
3)同时复制源程序和 a.ocx: 如果设置了二进制兼容,打开工程会字段注册,等同于 2)b) 情形。
是我理解的这个意思吗?谢谢!
老鸟说的应该是那个意思~~~~~~~^_^
ProgID 像是姓名,A、B 可以取名相同,会覆盖。
所以 B 不一定完全不可用,通过 CLSID 有可能成功引用的,但这种混乱的情况是应该极力避免的,你要把 B 当作完全不可用看待。
不同的对象 CLSID 相同,极有可能引起一些意想不到的问题。