刚才结贴过快,请再过来说一下好吗?
原贴:
http://community.csdn.net/Expert/topic/4318/4318320.xml?temp=.5628473
主 题: 怎样将EXE文件变小?
hoho,我现在做的项目有600多个界面了,根据业务分类封装成五十多个ocx并由主程序动态调入,公用过程封装成DLL供各个ocx调用。这样做的好处是开发的时候没有必要把所有工程全部打开,只需要打开主框架和相关的ocx工程,程序运行时因为不需要把所有的东西加载到内存所以省内存启动也比较快。坏处嘛,编译的时候比较累,而且兼容性一旦弄错挺麻烦,所以我们专门写了一个程序来进行产品的编译工作
编译后主框架程序1.6兆,ocx和dll总共40多兆。
-------------------------------------------------
疑问: 你一般把哪些东东封装成ocx(我只做了Button,TextBox等的封装)? 整个Form也可以吗?如果可以,还有那种MDI子窗体的效果吗? DLL中我只做了一些公用过程,加密信息等。
原贴:
http://community.csdn.net/Expert/topic/4318/4318320.xml?temp=.5628473
主 题: 怎样将EXE文件变小?
hoho,我现在做的项目有600多个界面了,根据业务分类封装成五十多个ocx并由主程序动态调入,公用过程封装成DLL供各个ocx调用。这样做的好处是开发的时候没有必要把所有工程全部打开,只需要打开主框架和相关的ocx工程,程序运行时因为不需要把所有的东西加载到内存所以省内存启动也比较快。坏处嘛,编译的时候比较累,而且兼容性一旦弄错挺麻烦,所以我们专门写了一个程序来进行产品的编译工作
编译后主框架程序1.6兆,ocx和dll总共40多兆。
-------------------------------------------------
疑问: 你一般把哪些东东封装成ocx(我只做了Button,TextBox等的封装)? 整个Form也可以吗?如果可以,还有那种MDI子窗体的效果吗? DLL中我只做了一些公用过程,加密信息等。
----------------------
这一块有没有一个粗略的代码?参考一下。
Private Sub Command1_Click()
Call ClearUC
addUC "工程2.UserControl1" '这里模仿功能菜单点击后的操作,
'具体控件的名称可以保存在和权限相关的数据库表中
'根据不同的权限显示不同的功能菜单并将不同的界面控件加载到主窗体中
End Sub
Private Sub Command2_Click()
Call ClearUC
addUC "工程2.UserControl2"
End Sub
'清除已经存在的用户控件
Private Sub ClearUC()
On Error GoTo errhandle
Dim objCtl As Object
Set objCtl = Form1.Controls("TestCtl")
Form1.Controls.Remove ("TestCtl")
errhandle:
End Sub
'根据控件名加载控件到容器中
Private Sub addUC(ctl As String)
Dim objTest As Object
Set objTest = Form1.Controls.Add(ctl, "TestCtl", Picture1)
objTest.Visible = True
'根据容器大小用控件充满容器
objTest.Width = Picture1.Width
objTest.Height = Picture1.Height
End Sub
Option Explicit
Private ObjOldWidth As Long '保存控件的原始宽度
Private ObjOldHeight As Long '保存控件的原始高度
Private ObjOldFont As Single '保存控件的原始字体比Private Sub UserControl_Initialize()
Dim Obj As Control
ObjOldWidth = UserControl.ScaleWidth
ObjOldHeight = UserControl.ScaleHeight
ObjOldFont = UserControl.Font.Size / ObjOldHeight
On Error Resume Next
For Each Obj In UserControl
Obj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " "
Next ObjEnd SubPrivate Sub UserControl_Resize()
Dim Pos(4) As Double
Dim i As Long, TempPos As Long, StartPos As Long
Dim Obj As Control
Dim ScaleX As Double, ScaleY As Double
ScaleX = UserControl.ScaleWidth / ObjOldWidth
'保存窗体宽度缩放比例
ScaleY = UserControl.ScaleHeight / ObjOldHeight
'保存窗体高度缩放比例
On Error Resume Next
For Each Obj In UserControl
StartPos = 1
For i = 0 To 4
'读取控件的原始位置与大小
TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare)
If TempPos > 0 Then
Pos(i) = Mid(Obj.Tag, StartPos, TempPos - StartPos)
StartPos = TempPos + 1
Else
Pos(i) = 0
End If
'根据控件的原始位置及窗体改变大
'小的比例对控件重新定位与改变大小
Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY
Obj.Font.Size = ObjOldFont * UserControl.ScaleHeight
Next i
Next Obj
End Sub