211、如何将短文件名格式转成长文件名? 212、如何将桌面上的图标排列整齐? 213、VB 的 SDI /
MDI 开发环境切换 214、Combo的自动查询技术 215、如何改变
TreeView 的背景
211、如何将短文件名格式转成长文件名?
虽然在 Windows95/98 中已经都可以使用长文件名/目录
(最长可以到255个字节),但是在您将长文件名的文件或目录存文件时,系统同时给了它一个可以相容于以前 MS-DOS 时代的 8.3
格式的文件名称!
到目前为止,还是有些软件会使用 8.3 格式的文件名称,在安装这些软件时,它们写到注册文件中的资料,仍然采用 8.3
格式的文件名称,所以有时候,您在维护系统时,必须知道目前这些已经转成 8.3 格式的文件名称,原来的长文件名是什么。
在
问题:如何将长文件名转成短文件名格式 (MS-DOS 8.3) ,我们已经讲过长文件名转成短文件名,当时是使用 API
来做,过程上还蛮麻烦的,但是相反的,要从短文件名转成长文件名,过程却比较简单,也不需要用到 API,只要使用 Dir( )
就可以了!
'请将以下的模组放到声明区中:
Public Function GetLongFilename(ByVal
sShortName As String) As String Dim sLongName As String Dim sTemp As
String Dim iSlashPos As Integer
'在短文件名之后加上倒斜线 "\",避免 Instr 造成错误 sShortName = sShortName &
"\" '略过磁盘代号,从第四码开始 iSlashPos = InStr(4, sShortName, "\")
'从文件名之第四码之后,一段一段处理在二个倒斜线 "\"之间的字串转换 While iSlashPos sTemp =
Dir(Left$(sShortName, iSlashPos - 1), vbNormal + vbHidden + vbSystem +
vbDirectory) If sTemp = "" Then 'Error 52 - Bad File Name or
Number GetLongFilename = "" Exit Function End If sLongName =
sLongName & "\" & sTemp iSlashPos = InStr(iSlashPos + 1,
sShortName,
"\") Wend '将转换后的文件名加上原先略过的磁盘代号,变成完整的全路径文件名 GetLongFilename =
Left$(sShortName, 2) & sLongName End
Function
'实际使用范例如下:
Private Sub Command1_Click() '假设
C:\Program Files\Common Files 是一个正确的全路径文件名或目录 Print
GetLongFilename("C:\PROGRA~1\COMMON~1") End Sub
'结果就是 C:\Program
Files\Common Files。
212、如何将桌面上的图标排列整齐?
您的或您的使用者的桌面是否有一大堆乱乱的图标,您可以使用 VB
来将这些图标排列整 !
程序码如下:
Private Declare Function FindWindow Lib
"user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal
lpWindowName As String) As Long Private Declare Function GetWindow Lib
"user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long Private
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd
As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As
Long
Private Const GW_CHILD = 5 Private Const LVA_ALIGNLEFT =
&H1 Private Const LVM_ARRANGE = &H1016
Private Sub
Command1_Click() Dim hWnd1 As Long Dim hWnd2 As Long Dim Ret As
Long
hWnd1 = FindWindow("Progman", vbNullString) hWnd2 =
GetWindow(hWnd1, GW_CHILD) hWnd1 = GetWindow(hWnd2, GW_CHILD) Ret =
SendMessage(hWnd1, LVM_ARRANGE, 0, 0) End
Sub
执行完以上的程序码后,桌面上的所有图标便会自动的靠左对齐!
213、VB
的 SDI / MDI 开发环境切换
如果您使用过 Windows
应用程序,也许已经注意到并不是每个程序的使用者介面看上去都一样,也不见得同样的介面做的事就一样。使用者介面样式主要有两种:单一文件介面 (SDI)
和多重文件介面 (MDI)。SDI 介面的一个典型就是 Microsoft Windows 中的 WordPad 程序 (图
6.1)。在WordPad 中,使用者一次只能开启一个文件 (文件),想要开启另一个文件时,就必须先关上已开启的文件。
像
Microsoft Excel 和 Microsoft Word for Windows 这样的应用程序,就是 MDI
介面;它们允许同时显示多个文件,每个文件都显示在自己的视窗中 (图 6.2)。从程序的「视窗」功能表 ,可以看出它是否为一个 MDI
应用程序。如果「视窗」功能表中含有已开启的文件清单,可以让使用者藉此来切换要显示或编辑的文件,这个程序就是一个 MDI
应用程序。
Visual Basic IDE 也有这两种不同的型态:单一文件介面 (SDI) 或多重文件介面 (MDI)。对 SDI
选项来说,只要 Visual Basic 是目前作用中的应用程序,则所有 IDE
视窗都可在屏幕上的任何地方自由移动,并且会保持在其它的应用程序之上;而对 MDI 选项来说,所有 IDE
视窗则都包含在一个可调整大小的父视窗内。
在 VB5 或 VB6 刚安装好时,预设的开发环境是多重文件介面
(MDI),它最麻烦的地方是,当您的表单大小比较大时,或者您的表单是最大化时,您必须在 MDI
开发环境中使用卷动杆来移动表单,对设计者来说,不能一次看到表单的全貌,是相当不方便的,所以您需要将开发环境改成
SDI,但是要如何改呢?有的人找来找去,就是找不到从那里改,其实很简单,方法如下:
SDI 和 MDI 模式的切换
:
1、在「工具」功能表中选取「选项」。
此时会显示「选项」对话方块。 2、再选取「进阶」页签。 3、核取或取消核取「SDI 开发环境」核取方块。
-或-
1、在指令行使用 /sdi 或 /mdi 参数来执行 Visual
Basic。
设定好之后,不会马上生效!但是当您下次启动 Visual Basic 时,IDE 将以您选取的模式启动。
214、Combo的自动查询技术
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal
hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As
Long
Public Const CB_FINDSTRING = &H14C
Private Sub
Combo1_Change() Dim iStart As Integer Dim sString As
String Static iLeftOff As Integer
iStart = 1 iStart =
Combo1.SelStart
If iLeftOff <> 0 Then Combo1.SelStart =
iLeftOff iStart = iLeftOff End If
sString =
CStr(Left(Combo1.Text, iStart)) Combo1.ListIndex =
SendMessage(Combo1.hwnd, B_FINDSTRING, -1, ByVal CStr(Left(ombo1.Text,
iStart)))
If Combo1.ListIndex = -1 Then iLeftOff =
Len(sString) combo1.Text = sString End If
Combo1.SelStart =
iStart iLeftOff = 0 End Sub
静态变量 iLeftOff 指定了字符长度。
215、如何改变 TreeView 的背景
Private Declare Function SendMessage Lib "User32" Alias "SendMessageA"
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As
Long) As Long Private Declare Function GetWindowLong Lib "User32" Alias
"GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As
Long Private Declare Function SetWindowLong Lib "User32" Alias
"SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal
dwNewLong As Long) As Long
Private Const GWL_STYLE =
-16& Private Const TVM_SETBKCOLOR = 4381& Private Const
TVM_GETBKCOLOR = 4383& Private Const TVS_HASLINES =
2&
Dim frmlastForm As Form
Private Sub
Form_Load() Dim nodX As Node Set nodX = TreeView1.Nodes.Add(, , "R",
"Root") Set nodX = TreeView1.Nodes.Add("R", tvwChild, "C1", "Child
1") Set nodX = TreeView1.Nodes.Add("R", tvwChild, "C2", "Child
2") Set nodX = TreeView1.Nodes.Add("R", tvwChild, "C3", "Child
3") Set nodX = TreeView1.Nodes.Add("R", tvwChild, "C4", "Child
4") nodX.EnsureVisible TreeView1.style = tvwTreelinesText ' Style
4. TreeView1.BorderStyle = vbFixedSingle End Sub
Private Sub
Command1_Click() Dim lngStyle As Long Call
SendMessage(TreeView1.hWnd, TVM_SETBKCOLOR, 0, ByVal RGB(255, 0,
0)) '改变背景到红色
lngStyle = GetWindowLong(TreeView1.hWnd,
GWL_STYLE) Call SetWindowLong(TreeView1.hWnd, GWL_STYLE, lngStyle -
TVS_HASLINES) Call SetWindowLong(TreeView1.hWnd, GWL_STYLE,
lngStyle) End Sub |