




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VB编程经验总结 VB编程经验小结1VB中动态加载ODBC数据源的方法Sub RegisterDataSource()Dim strAttribsAs String建造关键字字符串。 C:myfilemyexample.l.mdb数据库文件名(包含路径)strAttribs=“DBQ=”_“C:myfilemyexample.mdb”_Chr (13)“OemToAnsi=No”_Chr (13)“SERVER=SEQUEL”_Chr (13)“Network=DBNMPNTW”_Chr (13)“Database=WorkDB”_Chr (13)“Address=SEQUELPIPESQLQUERY”建立新的注册的DSN。 rdoEngine.rdoRegisterDataSource“mydatasource”,“Microsoft AessDriver(.mdb)”,True,strAttribs End Sub Private Sub Form_Load()Call rdoRegisterDataSourceEnd Sub通过相对路径指定数据库文件在很多情况下,不管采用上述哪一种方法打开数据库,都必须在程序设计时就指定需要打开的数据库文件。 但是,我们通常不能保证该软件完成后一定会被安装在每台机器的同一目录下。 因此该数据库文件的绝对路径一般在设计时还难以完全确定,只能采用相对路径的办法来解决这个问题。 在VB中,App对象是一个全局对象,用来提供当前应用程序的相关信息,其Path属性反映的是当前应用程序的可执行文件(.exe)所在的绝对路径,并且只在程序运行时才有效。 通过使用App对象的Path属性,可以方便地获得当前程序所在的目录路径。 因此,如果把数据库文件存放在与程序路径相关的目录下,便可以在程序设计时就指定数据库文件的相对路径,当程序运行时,通过App对象的Path属性动态地获取其绝对路径。 下面的一段代码,用来在程序开始运行时获取程序的路径,并赋值给变量AppPath,然后在数据控件Data1的Database Name属性中与数据库文件的相对路径DatabaseSample.Mdb结合,组成数据库文件的绝对路径。 这段代码通常出现在Form-Load中:Sub Form_load()Dim AppPathAs String设置路径变量AppPath=App.Path获取程序路径If Right(AppPath,1)Then AppPath=AppPath+若路径尾部没有,则添加之Data1.Database Name=AppPath+DatabaseSample.mdb与相对路径结合,组成绝对路径end sub3将datenvironment做为活动连接供查询使用with rs.activeconnect=datenvironment1.connect1.openselect*from tableend with记录分组和参数查询:这两项工作都是在Command对象的属性页中设置。 将记录按某个字段分组先设置好Connection1连接和Command1的数据源,然后在Command1的属性页“分组”选项卡上选中“分组命令对象”复选框,然后从左边选择一个字段添加到右边框中,确定即可。 这样生成的记录集便具有了层次性,和GROUP BY的效果是一样的,可以用MSHflexgrid或报表Data Report来绑定。 使用带单个参数的SQL查询在Command1的属性页“通用”卡上选中使用“SQL语句”生成记录集,然后输入在WHERE子句中带?问号的查询SELECTname,moneyFROMinvoiceWHEREnameLIKE?。 这个问号就是一个参数,可以在代码中赋值,生成不同记录集。 当然,仅这样参数的设置还没完成,在“参数”选项卡上为这个问号设置属性,如参数名,输入/输出参数,数据类型等。 代码中赋予具体的参数值,很简单,在初始化命令对象的语句(DataEnvironment1.Command1)后面附上参数值就可以了,如Private SubForm_Load()DataEnvironment1.Command2符章秀Set MSHFlexGrid1.DataSource=DataEnvironment1.rsCommand2End SubDBGrid控件列宽的控制在设计时可通过DefColWidth属性来设置列宽,但这样无法为不同的列设置不同的宽度。 那么到底要怎么分别设置每一列的宽呢?这同样可在窗体的Activate事件中实现。 Form_Activate()DBGrid1?Columns (0)?Width=1000为第一列设置宽度DBGrid1?Columns (1)?Width=2500为第二列设置宽度DBGrid1?Columns (2)?Width=1000为第三列设置宽度End SubIsNull函数的应用判断一值是否为空,要用IsNull函数来实现,而不能用判断语句来实现,例如If Data1?Recordset?Fields (1)?Value=NULL Then要执行的语句End If这样无论Data1?Recordset?Fields (1)?Value的值是否为NULL,要执行的语句都执行不了,因为(Data1?Recordset?Fields (1)?Value=NULL)永远等于False,所有含有“NULL”的判断式的值都是False。 正确的处理方法为If IsNull(Data1?Recordset?Fields (1)?Value)=True Then要执行的语句End If如何用VB代码给ACESS表中添加字段.ConnectionString=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:test.mdb;Persist SecurityInfo=False.Open .Execute(CREATE TABLEEmployees(First NameTEXT (5)dim Cnas adobd.connection SetCn=New ADODB.Connection .ConnectionString=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:test.mdb;Persist SecurityInfo=False.Open .Execute(CREATE TABLE表名(字段1char (4),字段2char (4)添加字段.Executealter table表名“&“add字段3char (8)利用磁盘的序列号进行软件加密大家都知道,当您在命令行中键入“dir”指令后,系统都会读出一个称作Serial Number的十六进制数字。 这个数字理论上有上亿种可能,而且很难同时找到两个序列号一样的硬盘。 这就是我这种注册方法的理论依据,通过判断指定磁盘的序列号决定该机器的注册号。 要实现该功能,如何获得指定磁盘的序列号是最关键的。 在Windows中,有一个GetVolumeInformation的API函数,我们利用这个函数就可以实现。 下面是实现该功能所需要的代码首先在把下面的GetVolumeInformation的API函数放入一个模块中。 Public Declare Function GetVolumeInformationLibkernel32_AliasGetVolumeInformationA(ByVal lpRootPathNameAs String,_ByVal lpVolumeNameBufferAs String,ByVal nVolumeNameSizeAs Long,_lpVolumeSerialNumber As Long,lpMaximumComponentLength As Long,_lpFileSystemFlags As Long,ByVal lpFileSystemNameBufferAs String,_ByVal nFileSystemNameSizeAs Long)As LongAs Long窗体代码如下Option ExplicitDim localid,ms Dim WithEvents rs As RecordsetDimWithEvents AsConnection SubCmdLocalID()根据C盘序列号得到原ID DimDriver,VolName,Fsys As String DimvolNumber,MCM,FSF As Long Dimpath As String,dirve As String Dimres As Long path=App.path dirve=Left(path,3)res=GetVolumeInformation(dirve,VolName,127,volNumber,MCM,FSF,Fsys,127)volNumber是C盘序列号localid=Int(volNumber/2+123456789)Text2.Text=localid End Sub Private Sub Command1_Click()此过程在第一次输入注册ID时写入数据库,第二次开始验证注册ID Dimregid,id Dimcm AsADODB.Command Setcm=New ADODB.Command cm.ActiveConnection= CallCmdLocalID regid=Val(Text1.Text)If regid=Int(localid/4*1+654321000)Then id=Val(Text1.Text)cm.CommandText=UPDATE注册ID&SET注册ID=&id rs.MoveFirst cm.Execute frm学生情况.Show0Set =Nothing Setcm=Nothing Setrs=Nothing UnloadMe Elsems=MsgBox(你的注册ID不合法或输入有误,请系注册或重新输入!,vbInformation,提示)Text1.Text=End If End SubPrivate SubForm_Load()Dim apppathAs String设置路径变量Dim lujing,idd CallCmdLocalID apppath=App.path获取程序路径Set =New Connection.CursorLocation=adUseClient IfRight(apppath,1)Then apppath=apppath+若路径尾部没有,则添加之lujing=apppath+data学生成绩.mdb与相对路径结合,组成绝对路径databasepath=lujing .OpenPROVIDER=Microsoft.Jet.OLEDB.4.0;&Data Source=&lujing Setrs=New Recordsetrs.Openselect*from注册ID,adOpenStatic,adLockOptimistic rs.MoveFirst idd=rs.Fields (0).Value IfiddThen Text1.Text=idd End Sub注如用户格式化C盘后需重新获得ID。 根据窗口变化自动调整控件的大小在程序的使用中,如果用户点击最大化或调整窗体的时候,窗体的控件依然不变化,非常不好看,所以我将这段源码贴上,供参考!非常方便!方法一Option ExplicitPrivate ObjOldWidthAs Long保存窗体的原始宽度Private ObjOldHeightAs Long保存窗体的原始高度Private ObjOldFontAs Single保存窗体的原始字体比在调用ResizeForm前先调用本函数Public SubResizeInit(FormName AsForm)Dim Obj As ControlObjOldWidth=FormName.ScaleWidth ObjOldHeight=FormName.ScaleHeight ObjOldFont=FormName.Font.Size/ObjOldHeight On Error Resume Next For Each Obj In FormNameObj.Tag=Obj.Left&Obj.Top&Obj.Width&Obj.Height&Next Obj On Error GoTo0End Sub按比例改变表单内各元件的大小,在调用ReSizeForm前先调用ReSizeInit函数Public SubResizeForm(FormName AsForm)Dim Pos (4)As DoubleDim iAs Long,TempPos As Long,StartPos As Long Dim Obj As Control DimScaleX As Double,ScaleY AsDouble ScaleX=FormName.ScaleWidth/ObjOldWidth保存窗体宽度缩放比例ScaleY=FormName.ScaleHeight/ObjOldHeight保存窗体高度缩放比例On Error Resume Next For Each Obj In FormName StartPos=1For i=0To4读取控件的原始位置与大小TempPos=InStr(StartPos,Obj.Tag,vbTextCompare)If TempPos0Then Pos(i)=Mid(Obj.Tag,StartPos,TempPos-StartPos)StartPos=TempPos+1Else Pos(i)=0End If根据控件的原始位置及窗体改变大小的比例对控件重新定位与改变大小Obj.Move Pos (0)*ScaleX,Pos (1)*ScaleY,Pos (2)*ScaleX,Pos (3)*ScaleY Obj.Font.Size=ObjOldFont*FormName.ScaleHeight Nexti Next Obj On Error GoTo0End SubPrivate SubForm_Resize()确保窗体改变时控件随之改变Call ResizeForm(Me)End SubPrivate SubForm_Load()在程序装入时必须加入Call ResizeInit(Me)End Sub方法二如果需要,可以写入bas,然后调用Option ExplicitDim FormOldWidthAs Long保存窗体的原始宽度Dim FormOldHeightAs Long保存窗体的原始高度在调用ResizeForm前先调用本函数Public SubResizeInit(FormName AsForm)DimObjAsControlFormOldWidth=FormName.ScaleWidth FormOldHeight=FormName.ScaleHeight OnErrorResumeNextForEachObjInFormNameObj.Tag=Obj.Left&Obj.Top&_&Obj.Width&Obj.Height&NextObjOnError GoTo0End Sub按比例改变表单内各元件的大小,在调用ReSizeForm前先调用ReSizeInit函数Public SubResizeForm(FormName AsForm)Dim Pos (4)AsDoubleDim IAs Long,TempPos As Long,StartPos As Long DimObjAsControl DimScaleX AsDouble,ScaleY AsDouble ScaleX=FormName.ScaleWidth/FormOldWidth保存窗体宽度缩放比例ScaleY=FormName.ScaleHeight/FormOldHeight保存窗体高度缩放比例OnErrorResumeNextForEachObjInFormName StartPos=1For I=0To4读取控件的原始位置与大小TempPos=InStr(StartPos,Obj.Tag,vbTextCompare)If TempPos0Then Pos(I)=Mid(Obj.Tag,StartPos,TempPos-StartPos)StartPos=TempPos+1Else Pos(I)=0End If根据控件的原始位置及窗体改变大小的比例对控件重新定位与改变大小Obj.Move Pos (0)*ScaleX,Pos (1)*ScaleY,_Pos (2)*ScaleX,Pos (3)*ScaleY NextI NextObjOnError GoTo0End SubPrivate SubForm_Load()Call ResizeInit(Me)在程序装入时必须加入End SubPrivate SubForm_Resize()Call ResizeForm(Me)确保窗体改变时控件随之改变EndSub10改变显示器的刷新率首先在模块中加入以入API函数声明Declare FunctionEnumDisplaySettings Libuser32AliasEnumDisplaySettingsA(ByVal lpszDeviceNameAs Long,ByVal iModeNumAsLong,lpDevMode AsAny)As BooleanDeclare FunctionChangeDisplaySettings Libuser32AliasChangeDisplaySettingsA(lpDevMode AsAny,ByVal dwFlagsAsLong)AsLongDeclareFunctionExitWindowsEx Libuser32_(ByVal uFlagsAsLong,ByVal dwReservedAsLong)AsLongPublic ConstEWX_LOGOFF=0Public ConstEWX_SHUTDOWN=1Public ConstEWX_REBOOT=2Public ConstEWX_FORCE=4Public ConstCCDEVICENAME=32Public ConstCCFORMNAME=32Public ConstDM_BITSPERPEL=&H40000Public ConstDM_PELSWIDTH=&H80000Public ConstDM_PELSHEIGHT=&H100000Public ConstCDS_UPDATEREGISTRY=&H1Public ConstCDS_TEST=&H4Public ConstDISP_CHANGE_SUCCESSFUL=0Public ConstDISP_CHANGE_RESTART=1Type DEVMODEdmDeviceName As String*CCDEVICENAME dmSpecVersionAs IntegerdmDriverVersion As Integer dmSizeAs IntegerdmDriverExtra As Integer dmFieldsAsLongdmOrientation As Integer dmPaperSizeAs IntegerdmPaperLength As Integer dmPaperWidthAs IntegerdmScale As Integer dmCopiesAs IntegerdmDefaultSource As Integer dmPrintQualityAsIntegerdmColor AsInteger dmDuplexAsIntegerdmYResolution AsInteger dmTTOptionAsIntegerdmCollate AsInteger dmFormNameAs String*CCFORMNAME dmUnusedPaddingAsIntegerdmBitsPerPel AsInteger dmPelsWidthAsLongdmPelsHeight AsLong dmDisplayFlagsAsLongdmDisplayFrequency AsLong EndType然后在Private SubForm_Load()中调用下面的过程Public Subfblsz()Dim DevMAs DEVMODE注释将取得的讯息存放在DevM erg&=EnumDisplaySettings(0&,0&,DevM)DevM.dmFields=DM_PELSWIDTH Or DM_PELSHEIGHT注释OrDM_BITSPERPEL DevM.dmPelsWidth=800注释想要设定的屏幕宽度DevM.dmPelsHeight=600注释想要设定的屏幕高度注释我们不更改色板,因为一旦更改色板就必须重新开机!注释DevM.dmBitsPerPel=32(could be8,16,32or even4)注释此行可用于改变色板注释以下这行指令会暂时更改屏幕的分辨率,是测试性的,不一定成功,注释不过因为没将设定值写到注册表,所以虽然可能更改成功,注释但是一旦重新开机后,会自动恢复成更改前的设定值erg&=ChangeDisplaySettings(DevM,CDS_TEST)注释上面的指令若成功,而且您想永久性的更改使用者的屏幕分辨率,注释您还必须使用下一行指令,将资料写到注册表注释:erg&=ChangeDisplaySettings(DevM,CDS_UPDATEREGISTRY)注释但是如果您只是想暂时更改使用者的屏幕分辨率,就不需要了.注释当然并不是您随便设定一个值,就一定会成功的更改屏幕分辨率,注释所以还需要检查是否更改成功!下面的程序就是检查是否更改成功Select Caseerg&Case DISP_CHANGE_RESTART注释通常如果有更改到色板,或者较老的板子,会要求重新开机an=MsgBox(您必须重新开机!,vbYesNo+vbSystemModal,讯息)If an=vbYes Thenerg&=ExitWindowsEx(EWX_REBOOT,0&)End IfCase DISP_CHANGE_SUCCESSFUL注释如果更改成功且不需重新开机,您就可以将设定值写到注册表中erg&=ChangeDisplaySettings(DevM,CDS_UPDATEREGISTRY)Case Else注释:更改不成功MsgBox不支持此一模式!,vbOKOnly+vbSystemModal,错误!End SelectEndSub11ACESS导入到EXCEL中首先在模块中加入以下过程Public SubAcessTOExcel(sqlstr AsString,rsAsRecordset, AsConnection)此过程导出时可导出字段名。 Dim IrowcountAsIntegerDim IcolcountAsIntegerDim xlAppAs Excel.Application DimxlBook As Excel.Workbook DimxlSheet As Excel.Worksheet DimxlQuery As Excel.QueryTable Withrs If.State=adStateOpen Then.Close End If.ActiveConnection=.CursorLocation=adUseClient.CursorType=adOpenStatic.LockType=adLockReadOnly.Source=sqlstr.Open End With Withrs If.RecordCount1Then MsgBox(没有记录!)Exit SubEnd IfIrowcount=.RecordCount记录总数Icolcount=.Fields.Count字段总数EndWithSet xlApp=CreateObject(Excel.Application)Set xlBook=Nothing SetxlSheet=Nothing SetxlBook=xlApp.Workbooks().Add SetxlSheet=xlBook.Worksheets(sheet1)xlApp.Visible=True SetxlQuery=xlSheet.QueryTables.Add(rs,xlSheet.Range(a1)添加查询语句,导入EXCEL数据With xlQuery.FieldNames=True.RowNumbers=False.FillAdjacentFormulas=False.PreserveFormatting=True.RefreshOnFileOpen=False.BackgroundQuery=True.RefreshStyle=xlInsertDeleteCells.SavePassword=True.SaveData=True.AdjustColumnWidth=True.RefreshPeriod=0.PreserveColumnInfo=True EndWith xlQuery.FieldNames=True显示字段名xlQuery.Refresh xlApp.Application.Visible=True SetxlApp=Nothing交还控制给Excel SetxlBook=Nothing SetxlSheet=Nothing EndSub然后在Command1_Click()中调用Private SubCommand1_Click()Dim sqlstrAsStringsqlstr=select*from&hzbm AcessTOExcelsqlstr,rs, rs.Requery DataGrid1.Refresh EndSub不导出字段名的方法PrivateSubAcessTOExcel_Click()Acess导入至Excel Dimmyexcel As New Excel.Application定义EXCEL对象Dim mybookAs NewExcel.Workbook定义EXCEL的工作薄对象Dim mysheetAs NewExcel.Worksheet定义EXCEL的工作表对象Set mybook=myexcel.Workbooks.Add添加一个新的BOOK Setmysheet=mybook.Worksheets.Add添加一个新的SHEET myexcel.Visible=True mysheet.ClearArrows mysheet.Cells.CopyFromRecordset adoPrimaryRSadoPrimaryRS为连接到ACESS数据库的ADO的RECORDSET对象.Set myexcel=Nothing Setmybook=Nothing Setmysheet=Nothing VB数据导出EXCEL之重要属性所以积累的一点属性,因为EXCEL的属性在VB的MSDN中很难找到几个,这些都是我在实践中得到的,今天算是做了个总结,以后忘了,也有地方可以找了Dim AppexcelAsExcel.Application定义一个EXCEL对象Dim WbexcelAsExcel.Workbook定义一个EXCEL实例Dim wsexcelAsExcel.Worksheet定义一个工作表Set Appexcel=CreateObject(excel.applicationAppexcel.WindowState=xlMaximized最大化显示Appexcel.Caption=strTitle标题Set Wbexcel=Appexcel.Workbooks.AddAppexcel.Visible=TrueSet wsexcel=Appexcel.Sheets (1)设置左边距和右边距wsexcel.PageSetup.LeftMargin=20wsexcel.PageSetup.RightMargin=0.7wsexcel.Cells(1,1).Value=AAAA单元格的值wsexcel.Range(A11.MergeCells=True是否合并单元格wsexcel.Range(A11.Font.Size=24字体大小wsexcel.Range(A11.Font.FontStyle=宋体字体wsexcel.Range(A11.Font.Bold=True粗体wsexcel.Range(B2:E2.Borders(xlBottom).Weight=xlThin下划线wsexcel.Range(B2:E2.Borders(xlTop).Weight=xlThin上划线水平居中和垂直居中wsexcel.Range(A2:A4.HorizontalAlignment=xlCenterwsexcel.Range(A2:A4.VerticalAlignment=xlCenterwsexcel.Range(A1.BorderAround (1)单元格边框wsexcel.Cells(2,1).ColumnWidth=14设置列宽wsexcel.Columns(D.NumberFormat=0设置列的显示格式,数字以文本格式显示,(整列修改用Columns,单个单元格修改用Range)wsexcel.Columns(E.Hidden=True列隐藏wsexcel.Range(E5.WrapText=True文本自动换行END Sub12.EXCEL导入到ACESS中的方法PrivateSubExcelTOAcess_Click()Excel导入至Acess OnErrorGoToerrorh:lblStatus.Caption=lblStatus.Caption&数据导入Dim rosAsNewRecordset定义与Excel数据库连接的记录集对象Dim sheetnameAsStringSet con=New ADODB.Connection CommonDialog1.Filter=Excel Files(*.xls)|*.xlsCommonDialog1.ShowOpen lujing=CommonDialog1.FileName IflujingThen Form1.Show vbModal,Me此窗体为选择EXCEL工作表的窗体.If Text1.TextThen sheetname=Text1.Text&$con.ConnectionString=Provider=Microsoft.Jet.OLEDB.4.0;Persist SecurityInfo=false;Data Source=&lujing&;Extended Properties=Excel8.0;HDR=Yes;IMEX=1连接Exce数据库con.Open打开Exce数据库ros.OpenSelect*From+sheetname,con,1,1打开Excel数据库的要导出的表If ros.EOF=True ThenExit SubEnd IfWhile Notros.EOF .ExecuteInsert Into学生成绩册(考号,姓名,年级,班级,学校,语文,数学,英语)Values(&ros (0)&,&ros (1)&,&ros (2)&,&ros (3)&,&ros (4)&,&ros (5)&,&ros (6)&,&ros (7)&)向ACESS数据库的要导入的表中导入记录ros.MoveNext Wendros.Close con.Close Setros=Nothing Setcon=Nothing CallcmdRefresh End IfEndIf ExitSub errorh:MsgBox Err.Description OnErrorGoTo0EndSub13Visual Basic安装程序制作安装程序制作是做项目必不可少的一道工序,网上的安装软件很多,可以用五花八门来开形容了在此笔者介绍一个最简单的安装方法,就是用自带的打包程序进行打包,虽然比较普通,不过内部却有不少窍门,相信这一点知道的人可能不多吧!(请大家一定看到最后,好戏在后头)好了,不废话了,开始进入正题。 运行打包向导,如下图所示点击“浏览”按钮,选择要打包的工程。 然后单击“打包”按钮(在此只介绍打包,其他的功能不做介绍)。 进入下一个页面,如下图所示选择要打包的类型,普通的工程选择“标准安装包”就可以了,控件之类的看使用的地点,如果是在网页中使用,请选择“Inter软件包”,然后点击“下一步”按钮。 如下图所示选择包文件存放的位置(这一点不用多说了吧),如下图所示向导自动找出了工程中应用的控件、等文件,你需要自己到工程中检查一下,看看所包含的文件是否全,第三方控件所带的文件一定要带上,否则麻烦多多,然后点击下一步,如下图所示选择打包的文件类型,根据需要,如果你发布是用光盘,则选择单个的压缩文件,如果发布是用软盘之类的,则选择多个压缩文件。 (当然,这不是绝对的,用光盘你也可以选择多个压缩文件,不过可能没有人这么干)。 然后单击“下一步”。 如下图所示确定安装程序的标题,就是在安装背景上显示的文字。 然后单击“下一步”,如下图所示在这里你可以设置在“开始菜单”中显示哪些项目,比如你可以加卸载程序项,可以选择“新建项”按钮,然后在“目标”栏中输入$(WinPath)st6unst.exe-n$(AppPath)ST6UNST.LOG,包括双引号。 在“开始”项目中选择“$(WinPath)”,不包括双引号。 然后点击确定,如下图所示在此你可以更改文件夹的安装位置,然后点击“下一步”,如下图所示在此你可以将文件设置为共享(即文件可以被多个程序使用)。 到此为止安装制作完成。 安装完之后会生成三个文件和一个文件夹,如下图所示SERTUP.LST安装信息文件.文件包是数据文件,安装的文件全部在包里。 Setup.exe是安装的主文件。 Support是压缩包中所包含的所有文件。 如下图所示这个文件夹里有一个比较重要的文件就是“执照套打.BAT”这个批处理文件(不同的工程,文件名会不一样),当你的工程改动之后,你可以将工程重新编译一下,然后将执行文件拷贝到此目录下,执行这个批处理文件,就可以重新打包,而不需要每次改动都运行打包向导了。 还有一个比较重要的文件就是SETUP.EXE这个文件,他是安装的主文件,安装时我们看到的界面就是这个文件运行产生的。 他是用写的,源程序在的安装目录下“C:Program FilesMicrosoft VisualStudioVB98WizardsPDWizardSetup1SETUP1.VBP”,你可以用直接来此工程(的安装界面太丑了,所以你可以自己改动,改的怎么样就要看你自己的能力了),如果在安装之后想在桌面上加上程序的快捷方式,可以编译此工程,打开“frmSetup1”窗口,在其代码的第行的位置上加如下代码Dim sProgramsPathAsStringDim sDesktopPathAsStringsProgramsPath=GetSpecialFolder(sfidPROGRAMS)sDesktopPath=GetSpecialFolder(sfidDESKTOP)sProgramsPath=sProgramsPath&gstrAppName&gstrAppName&.lnksDesktopPath=sDesktopPath&gstrAppName&.lnkFileCopy sProgramsPath,sDesktopPath下面对向导生成的SERTUP.LST(安装信息文件)进行一下介绍,如下图所示这是文件的第一个区的内容,SetupTitle设置的是解压窗口的标题,SetupText设置的是解压窗口的内容。 改动之后,如下图所示接下来介绍一下SERTUP.LST文件Setup区的作用,如下图所示改动olor为不同的值,可以改变安装窗口的背景色(默认为蓝色,看都看腻了)。 改为之后为绿色(当然还有其他的颜色,你可以自己慢慢试),效果如下图所示(这是我改动之后的自带的安装程序的安装界面,大家觉得怎么样,是不是不比其他的一些安装软件的界面逊色)好了,安装程序就介绍到这了,当然了,的安装程序完全是自己做的,到底怎么改以及改动的漂亮与否,就要看你自己的水平与美术功底了,反正安装程序的源码都给你了,你想怎么做都行13解决安装过程中注册文件C:WINDOWSSYSTEMexpsrv.dll时出错;错误:DLL有两种,一种是标准DLL,另一种是ActiveX DLL。 前者拷贝到用户机器上就可以工作了,而后者还需要调用DLL中的DllRegisterServer或者使用RegSvr32进行注册才能使用。 你可以打开VB98WizardsPDWizardVB6dep.ini文件。 下面是这个文件的片断ExpSrv.dll&o Dest=(WinSysPathSysFile)R CABFileName=MSJet35.cab CCABDefaultURL=activex.microsoft./controls/vb6ILzh|Z CABINFFile=MSJet35.inf rz8cC月下之论坛|知青论坛|安达物流系统|五子棋MSRD2x35.dllz;Dest=(WinSysPathSysFile)T9H=g Register=(DLLSelfRegister)K CABFileName=MSJet35.cab iCABDefaultURL=activex.microsoft./controls/vb6|*w CABINFFile=MSJet35.inf m?虚可以看到MSRD2x35.dll比ExpSrv.dll多一行Register=(DLLSelfRegister),这是因为MSRD2x35.dll是ActiveX DLL。 ExpSrv.dll是普通的DLL,没有DllRegisterServer,也用不着注册。 你所遇到的问题是VB6的一个Bug(在VB6SP3中已经修复)。 如果你的VB6dep.ini文件的ExpSrv.dll多了Register一行,应该删除。 或者打开安装程序的Setup.lst,删除其中ExpSrv.dll一行中的“(DLLSelfRegister)”字样。 V+X3?虚问题我在做成安装文件后,安装过程中系统缺省的目录是C:Program FilesTele,而我需要的是C:Tele2000,请问有办法修改吗?Z#?虚答要修改安装程序的缺省目录,可以打开安装盘的Setup.lst文件,在这个文件中可以找到下面一行?虚谷DefaultDir=(ProgramFiles)tele G9T将这行中的“(ProgramFiles)tele”修改为你想要的目录(如C:Tele2000)就可以了。 8?虚谷问题用VB5的安装向导制作的程序安装包里,总有一个.dep文件,请问这个文件有什么用?是否与OCX注册有关?如何打开?如何?pUp?虚谷答只有当你为ActiveX控件制作安装包的时候,才会出现.dep文件。 这个文件主要是供使用你的ActiveX控件的程序设计者制作他自己程序的安装盘时使用的。 你的用户在使用Setup Wizard制作安装盘时,Setup Wizard会读取这个文件,检查你的ActiveX控件需要哪些DLL支持。 一般不用手工修改这个文件,如果你认为确有必要,可以使用记事本打开修改。 问题我用VBAess开发数据库系统。 但到发布时用VB自已的发布向导时,我程序目录中的子目录的文件却加入不正常,向导不按子目录区分,而是将所有文件都加到程序目录中。 怎么办?Se?答VB的安装向导是支持制作包括子目录的安装程序的。 运行安装向导到“文件小节”一步,在对话框中选择“添加”按钮,然后选择应该放置在子目录中的文件添加到文件列表中。 Y?虚然后从文件列表中选择该文件,点击“文件详细资料”按钮。 在图3所示对话框中设置目标路径。 最好
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机床电气线路安装维修指南
- 2025年耳鼻喉科学鼻窦炎药物治疗应用考试题答案及解析
- 矿山企业矿山环保管理人员聘请与环保治理合同
- 离婚协议子女探视权及财产分割执行细则与补偿协议
- 矿山开采劳务外包及资源综合利用合同
- 离婚后子女抚养费、教育金支付与财产分割协议书
- 大数据产业园区厂房租赁与数据安全保护协议
- 班组级岗前安全培训内容课件
- 2025年财务分析试卷及答案
- 班组标准化管理课件
- 九一八警钟长鸣强国有我+课件-2025-2026学年高一上学期爱国主义主题班会教育+-
- 2025中国人民抗日战争暨世界反法西斯战争胜利80周年阅兵观后感心得体会3篇
- 2025年辅警笔试考试题库题库与答案
- 山东省汽车维修工时定额(T-SDAMTIA 0001-2023)
- 工程回访及客户满意度表最新文档
- (高职)企业财务会计电子课件完整版PPT全书电子教案
- DB23∕T 1019-2020 黑龙江省建筑工程资料管理标准
- T∕CHAS 10-4-13-2020 中国医院质量安全管理 第4-13部分:医疗管理住院患者健康教育
- VTE的预防与治疗(课堂PPT)
- 第五章 新型化学纤维
- 100关键字写字要诀(动画_mp3配音)2(1)
评论
0/150
提交评论