VBGood网站全文搜索 Google

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

126、如何找出 Temp 目录的正确路径?
127、建立 Windows95/98 的快捷方式
128、如何用 VB 呼叫出在【查找:所有文件】中的【浏览资料夹】问话框?
129、让您的文字框有 Undo / Redo 的功能
130、如何使点矩阵印表机一次只印一行

126、如何找出 Temp 目录的正确路径?

有时候,我们的 VB 程序在执行时,会产生一些文件,或许只是暂存档,这时您可以考虑放在 Windows 的 Temp 目录下,这个目录在预设的情形下是在 c:\windows\temp,但是, User 有时候由于要使新旧版本共存,或者其他原因,有人会将 Windows 目录改成 c:\win95、c:\win98、Windows95 或 Windows98......

若是程序中必须用到 Temp 目录,要找到正确的路径,做法如下:

注释:在声明区中加入以下声明:

Const MAX_PATH = 260

Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

Public Function GetTmpPath()
Dim strFolder As String
Dim lngResult As Long
strFolder = String(MAX_PATH, 0)
lngResult = GetTempPath(MAX_PATH, strFolder)
If lngResult <> 0 Then
GetTmpPath = Left(strFolder, InStr(strFolder, Chr(0)) - 1)
Else: GetTmpPath = ""
End If
End Function

注释:在程序中使用方法如下:

Private Sub Command1_Click()
Call MsgBox("您电脑中 Temp 目录的正确路径是" & GetTmpPath, vbInformation)
End Sub

127、建立 Windows95/98 的快捷方式

在前面我们提到过快捷方式,不过当时提到的快捷方式是专门用于连结 Internet 的网页使用的,现在我们要谈的则是在 Windows95/98 中的一般快捷方式,也就是要放在【开始】或【桌面】上,方便使用者启动程序的快捷方式!

注释:请在声明区中加入以下的声明:(以下为 VB4-32 / VB5)
注释:VB4-32
Declare Function fCreateShellLink Lib "STKIT432.DLL" (ByVal lpstrFolderName as String, ByVal lpstrLinkName as String, ByVal lpstrLinkPath as String, ByVal lpstrLinkArgs as String) As Long
注释:VB5
Declare Function OSfCreateShellLink Lib "VB5STKIT.DLL" Alias "fCreateShellLink" (ByVal lpstrFolderName As String, ByVal lpstrLinkName As String, ByVal lpstrLinkPath As String, ByVal lpstrLinkArguments As String) As Long

注释:参数说明:

lpstrFolderName 要放置快捷方式的位置,但是指的是对应到【开始】的【程序】的相对位置
【程序】的实际目录位置是 C:\Windows\Start Menu\Programs
【桌面】的实际目录位置是 C:\Windows\Desktop
所以如果想将快捷方式放在桌面上,此参数的设定值应为 "..\..\Desktop"
lpstrLinkName 快捷方式要显示出来的说明文字
lpstrLinkPath 快捷方式要开启或执行的文件的实际位置
lpstrLinkArgs 开启或执行的文件若需要参数,则放在这 

注释:在程序中使用的方法如下:

lngResult = fCreateShellLink("..\..\Desktop", "记事本捷径", " c:\windows\notepad.exe","")

128、如何用 VB 呼叫出在【查找:所有文件】中的【浏览资料夹】问话框?

相信大家都使用过 Windows 95/98 的【开始】【查找】【文件或资料夹...】功能,当然【查找】的功能不一定要从【开始】开始,在 Windows 的很多地方,例如【资源管理器】或【我的电脑】...等,都可以按下滑鼠右键来使用【查找】的功能。


在【查找:所有文件】问话框中,在【名称及位置】页中,有一个【浏览】的按钮,按下后会出现一个大家似曾相识的问话框,叫作【浏览资料夹】问话框,在这个问话框中,您可以看到电脑中所有的磁盘及资料夹,您知道在 VB中要如何呼叫它吗?


注释:请在声明区中加入以下声明:

Private Const BIF_RETURNONLYFSDIRS = 1
Private Const BIF_DONTGOBELOWDOMAIN = 2
Private Const MAX_PATH = 260

Private Declare Function SHBrowseForFolder Lib "shell32" _
(lpbi As BrowseInfo) As Long

Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long

Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long

Private Type BrowseInfo
hWndOwner As Long
pIDLRoot As Long
pszDisplayName As Long
lpszTitle As Long
ulFlags As Long
lpfnCallback As Long
lParam As Long
iImage As Long
End Type

注释:在 Form 中放一个 CommandButton,并加入以下程序:

Private Sub Command1_Click()
Dim lpIDList As Long
Dim sBuffer As String
Dim szTitle As String
Dim tBrowseInfo As BrowseInfo
szTitle = "请选择要开始搜寻的资料夹" 注释:<-- 此标题可根据 要自行更改

With tBrowseInfo
.hWndOwner = Me.hWnd
.lpszTitle = lstrcat(szTitle, "")
.ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
End With

lpIDList = SHBrowseForFolder(tBrowseInfo)

If (lpIDList) Then
sBuffer = Space(MAX_PATH)
SHGetPathFromIDList lpIDList, sBuffer
sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
MsgBox sBuffer
End If
End Sub

注释:好了,执行您的程序,按下按钮看看结果吧!

129、让您的文字框有 Undo / Redo 的功能

很多软件都有提供 Undo / Redo 的功能,Microsoft 的产品都可以提供多次 Undo 反悔,功能更强大!

在 VB 的程序中,我们也可以提供这样的功能!不过只能 Undo / Redo 一次

注释:在声明区中加入以下声明:

注释:32位元
注释:Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
注释:Const EM_UNDO = &HC7

注释:16位元
Private Declare Function SendMessage Lib "User" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Any) As Long
Const WM_USER = &H400
Const EM_UNDO = WM_USER + 23

注释:在程序中使用的方式如下: ( Undo Text1 中的输入 )

Private Sub Command1_Click()
Dim UndoResult As Long
UndoResult = SendMessage(Text1.hwnd, EM_UNDO, 0, 0)
注释:传回值 UndoResult = -1 表示 Undo 不成功
End Sub

注释:使用以上的方法,第一次是 Undo ,第二次就等于是 Redo

130、如何使点矩阵印表机一次只印一行

VB 有提供一个 Printer 物件来帮我们做列印,但是,当我们使用点矩阵印表机列印时,若希望每次只列印一行资料后,印表机不要自动跳页,继续等待列印!这时候往往造成很多人的困扰,因为:若不使用 NewPage 和 EndDoc 方法就不会立刻印出,但是用了又会跳页。

这时候,我们就不能再使用 Printer 物件,然而我们可以用以前在 Dos 时代使用的方法如下:

Open "PRN" For Output As #1
Print #1,"列印内容"

但是有一点必须注意的是:上面这个方式绝对可以单行列印英文,但是若你想印中英文, 你的印表机必须有内建中文字体才行!