VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - VB问题全功略(37)
发表评论(0)作者:不详, 平台:VB6.0+Win98, 阅读:10508, 日期:2002-02-02
VB问题全功略(37)

181、如何在 VB5 中打开 VB6 的工程?
182、VB6.0 的 Help 在那里?MSDN 是什么?
183、如何判断资料库中某一个 Table 是否存在?(ADO)
184、如何移除或更改桌面背景的底色图案 (Wallpaper)?
185、如何在不开启文件的情况下打印各类文件?

181、如何在 VB5 中打开 VB6 的工程?

如果您用 VB5 打开 VB6 撰写的工程,会出现一个类似以下的讯息:

"Retained 为不正确的键。无法载入文件 C:\Windows\Desktop\Project1.vbp。"
"Retained is an invalid key. The file C:\Windows\Desktop\Project1.vbp can注释:t be loaded".

那是因为在 VB6 的工程的 .vbp 文件中,多了一个之前的 VB 版本不认得的键值 "Retained" 的缘故!

要解决这个问题很简单,您只要依照以下的几个步骤:

1、使用记事本 (Notepad.exe) 打开 VB6 的工程的 .vbp 文件。
2、在这个文件中找到包含 "Retained" 字串的那一行,将那一整行移除。
3、存文件。

这样子您就可以使用 VB5 来打开之前使用 VB6 开发的工程了!很简单吧!

注:我在别的网站上看到有人说,这样子做了之后不一定百分之百成功,不过我自己试了之后,倒是没有出现错误,各位也自己试试吧!

182、VB6.0 的 Help 在那里?MSDN 是什么?

很多人在安装了 VB6.0 ,开始撰写程序之后,遇到了问题,按下【F1】,却出现了错误讯息,告诉您:

【MSDN 不存在......,请重新安装 MSDN】

有的人还会觉得很奇怪,VB6.0 的 Help 出了什么问题了?MSDN 又是什么?为什么要重新安装 MSDN?

其实,从 VB6.0 以后,Microsoft 已经将它所有的开发软件,合并成 Microsoft Visual Studio 6.0,一起出售 ( 当然,也有分开独立贩售的版本 ),在合并软件的同时,Microsoft 也将每一个开发软件的 Help 挪出来,统一放在 MSDN 光盘中,所以,现在不管您买的是合并软件的 Microsoft Visual Studio 6.0 或是独立贩售的 VB6.0 版本,都会另外附上二片 Microsoft MSDN Library 光盘。

今天,如果您购买的是独立贩售的 VB6.0 版本,在您安装完 VB6.0 之前,安装程序会要求您放入 MSDN 光盘,它会继续帮您安装 MSDN (也就是新版的 Help)。至于安装的注意事项,请参考

问题10:不方便的 Msdn -- VB6.0 的 Help

如果您安装 VB6.0 时,没有同时安装 MSDN,也没关系,您只要找到 MSDN 光盘,将第一片放入光驱,直接执行 Setup.exe 即可!

注:VB6 及 Microsoft Visual Studio 6.0 所附之 MSDN Library 光盘其实只是一个特殊版本,是专门针对 Microsoft Visual Studio 6.0 所推出的!MSDN Library 光盘在 VB6 及 Microsoft Visual Studio 6.0 出现之前就已经存在很久了,是微软针对程序开发人员的官方的技术资源,它定期提供产品操作手册、范例程序、技术文章、公用程序及许多最新的技术资料。而随 VB6 及 Microsoft Visual Studio 6.0 所附之 MSDN Library 光盘内容包含 VB6 及 Microsoft Visual Studio 6.0 的最新产品手册 (电子书) 及技术资料。

183、如何判断资料库中某一个 Table 是否存在?(ADO)

要判断资料库中某一个 Table 是否存在?最简单的方法就是错误尝试法!什么叫做错误尝试法呢?就是先假设它存在,直接去打开它,如果它真的存在,不会有错误产生,但是如果它不存在的话,就会有错误产生!做法大致如下:

1、设定 On Error Resume Next
2、直接打开要检查的 Table
3、如果文件存在,则 err.Number=0

我们就以 Access 为例,资料库使用 VB 内附的 Biblio.mdb,程序码如下:

On Error Resume Next 注释:1
Set Conn = CreateObject("ADODB.Connection")
Conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=C:\Biblio.mdb"
Set rs = Conn.execute("Titles") 注释:2
If Err.Number <> 0 Then MsgBox "Table 不存在" Else MsgBox "Table 存在" 注释:3

184、如何移除或更改桌面背景的底色图案 (Wallpaper)?

SystemParametersInfo 这个 API 可以设定许多 Windows 系统的功能参数,而其中一个参数就是桌面底图!通常一般的使用者会透过控制面板中的【显示器】来设定桌面底图。

在底下的范例中,我们使用 SPI_SETDESKWALLPAPER 这个参数及图片文件名称来设定新的桌面底图,同时使用 SPIF_SENDWININICHANGE 来通知各个视窗这个改变。

注释:在表单的声明区中加入以下声明及常数:

Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As String, ByVal fuWinIni As Long) As Long

Const SPI_SETDESKWALLPAPER = 20
Const SPIF_UPDATEINIFILE = &H1
Const SPIF_SENDWININICHANGE = &H2

注释:在表单上加入一个 CommandButton (Command1) 来移除桌面底图,程序码如下:

Private Sub Command1_Click()
Dim X As Long
X = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0&, "(None)", SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE)
MsgBox "桌面底图 (Wallpaper) 已经被移除"
End Sub

注释:在表单上加入另一个 CommandButton (Command2) 来更改桌面底图,程序码如下:

Private Sub Command2_Click()
Dim FileName As String
Dim X As Long
FileName = "c:\windows\test.bmp"
X = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0&, FileName, SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE)
MsgBox "桌面底图 (Wallpaper) 已经被更改"
End Sub
185、如何在不开启文件的情况下打印各类文件?

您还记得或怀念以前 DOS 时代,在 DOS 的命令列就可以直接下指令打印文件吗?

其实这个题目的标题,就如同当今的报纸标题一般,有点夸张,因为要打印文件,势必要先开启文件!

但是您也不用失望,既然标题会这样订,表示我也有好方法 (其实应该说 Microsoft 有提供好方法)!您只要使用 ShellExecuteAny 这个 API,对于各种不同格式不同类型的文件,您都不用自己先去启动开启该类文件的应用程序,再开启文件,再打印文件!

看到上面的说明,是否让您回想起之前我们提到过的二个主题:

如何用 VB 启动其他程序或开启各类文件?
完全模拟【开始】中的【运行...】功能

在这二个主题中,我们都有提到,不必管文件的扩展名是什么?格式是什么?您都可以使用如下面

Shell("Start C:\Test.txt")
Call Shell("rundll32.exe url.dll,FileProtocolHandler " & Text1, 1)

的方式来启动程序或开启文件。今天,我们要提到的 API 也可以开启或执行各种不同类型的文件,但是那不是我们今天的重点 (如果各位有兴趣的话,请自行研究!),今天的重点是 ShellExecuteAny 这个 API 它可以:

1、自动依文件型态帮我们在 Background 启动应用程序。
2、自动打印文件。
3、自动再关闭文件。

应用在我们的 VB 程序中的话,使用者只要输入或选择文件,不管什么文件 (当然是指在注册表中曾经注册过的文件类型),都可以打印!

注释:以下是完成的模组:

Private Declare Function ShellExecuteAny Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As Any, ByVal lpDirectory As Any, ByVal nShowCmd As Long) As Long

Const SW_SHOWMINNOACTIVE = 7

Sub PrintAnyFile(FileToPrint As String)
Dim Ret As Long
Ret = ShellExecuteAny(Me.hwnd, "print", FileToPrint, ByVal 0&, ByVal 0&, SW_SHOWMINNOACTIVE)
End Sub

注释:实际使用案例如下:

Private Sub Command1_Click()
PrintAnyFile Text1.Text
End Sub

其实上面这种打印文件的方式,它的作用方式,和我们直接将文件文件拖拉到打印机的图示上去打印文件是一样的道理! (如果您之前尚不知道这个功能的话,您现在可以试试看将一份文件直接拖拉放到打印机的图示上,看看结果如何!)