您的位置:寻梦网首页编程乐园VB 编程乐园VB问题全功略

VB问题全功略(60

上一页60下一页

296、您知道 Mid$ 函量可以放在 '=' 的左方吗?
297、如何呼叫出文件的内容问话框(Standard File Properties Dialog)?
298、如何设定 ListView 的标题列是立体或平面?
299、如何快速成组更新控件属性?
300、如何检查您的电脑是否开启 ActiveDesktop?

296、您知道 Mid$ 函量可以放在 '=' 的左方吗?

一般我们使用函量时,函量一定都在 '=' 的右方,再将函量计算的结果指定给 '=' 左方的变量或物件。但是,如果您从 Quick Basic 时代就开始使用 Basic 了,您一定知道 Mid$ 函量是可以放在 '=' 的左方的!

不过这个技巧,却有很多人不知道,以下举个例子:

Dim sName as string
sName = "Jack Smith, Jr."
Mid$(sName, 6, 5) = "Jones"

当程序执行完毕之后,sName 就等于 "Jack Jones, Jr." 了,这个方法不仅简单而且速度也快!

不过,很遗憾的,遇到上述情形时,我看到很多人都是这么写的:

Dim sName as string
sName = "Jack Smith, Jr."
sName = left$(sName, 6) & "Jones" & right$(sName, 4)

虽然也没有错啦,不过,我觉得还是前面的方法简单明快!

297、如何呼叫出文件的内容问话框(Standard File Properties Dialog)?

当您在资源管理器 (包含【我的电脑】【资源管理器】【网络邻居】..等可以列出文件名称的地方) 的任何一个文件上,按鼠标右键,在出现的下拉选单上选择【内容】,您就会看到和这个文件有关的一个问话框。

在这个文件内容问话框中,您可以看到以下资讯:

1、代表文件类型的图标及文件名。
2、文件类型。
3、文件位置。
4、文件大小。
5、MS-DOS名称。
6、建立日期。
7、修改日期。
8、存取日期。
9、文件属性。

如果您开发的应用程序类型类似资源管理器,需要列出文件,而您也想提供这样的功能,我们在 VB 中也可以做到,请在表单的声明区中加入以下声明及模组:

Private Type SHELLEXECUTEINFO
cbSize As Long
fMask As Long
hWnd As Long
lpVerb As String
lpFile As String
lpParameters As String
lpDirectory As String
nShow As Long
hInstApp As Long
lpIDList As Long
lpClass As String
hkeyClass As Long
dwHotKey As Long
hIcon As Long
hProcess As Long
End Type

Private Declare Function ShellExecuteEx Lib "shell32" (lpSEI As SHELLEXECUTEINFO) As Long
Private Const SEE_MASK_INVOKEIDLIST = &HC

Private Sub ShowFileProperties(ByVal aFile As String)
Dim sei As SHELLEXECUTEINFO
sei.hWnd = Me.hWnd
sei.lpVerb = "properties"
sei.lpFile = aFile
sei.fMask = SEE_MASK_INVOKEIDLIST
sei.cbSize = Len(sei)
ShellExecuteEx sei
End Sub

'在表单中加一个 CommandButton,我们以 msvbvm60.dll 为例,程序码如下:

Private Sub Command1_Click()
Call ShowFileProperties("c:\windows\system\msvbvm60.dll")
End Sub

298、如何设定 ListView 的标题列是立体或平面?

我想有些人看到今天的这个主题,心理头会想,ListView 的标题列是立体或平面,这有什么差别吗?

当然是有差别的!

我们都知道 ListView 的 View(查看模式) 有 4 种,如下:

0 lvwIcon 图标查看模式
1 lvwSmallIcon 小图标查看模式
2 lvwList 清单查看模式
3 lvwReport 详细资料查看模式 (有标题列)

而我们今天的主题是指 View 设定成 【3-lvwReport】,也就是【详细资料查看模式】。

在详细资料查看模式中,例如资源管理器,它的标题列是立体的,使用者的第一个直觉是,它可以排序!也就是只要在标题列上按一下,使用者就可以依这一个项目来正向排序或反向排序。但是,如果标题列是平面的话,使用者就不会认为它有排序的功能。

由于 ListView 的标题列预设是立体的,所以如果您放到 ListView 中的资料不需要排序,请在表单的声明区中加入以下声明及模组:

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
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 LVM_FIRST = &H1000
Private Const LVM_GETHEADER = (LVM_FIRST + 31)
Private Const HDS_BUTTONS = &H2

Private Sub ToggleHeader(lsvhWnd As Long)
Dim hHeader As Long, lStyle As Long
hHeader = SendMessage(lsvhWnd, LVM_GETHEADER, 0, ByVal 0&)
lStyle = GetWindowLong(hHeader, GWL_STYLE)
SetWindowLong hHeader, GWL_STYLE, lStyle Xor HDS_BUTTONS
End Sub

'使用的方序如下,在表单中加一个 ListView 物件:

Private Sub Form_Load()
Dim colX As ColumnHeader '声明变量。
Dim intX As Integer '计量器变量。
For intX = 1 To 4
Set colX = ListView1.ColumnHeaders.Add()
colX.Text = "Field " & intX
colX.Width = ListView1.Width / 4
Next intX

Call ToggleHeader(ListView1.hwnd) '设定标题列为平面
End Sub

299、如何快速成组更新控件属性?

Sub EnableAll(Enabled As Boolean, ParamArray objs() As Variant)
Dim obj As Variant
For Each obj In objs
obj.Enabled = Enabled
Next obj
End Sub
应用:
EnableAll True, Text1, Text2, Command1, Command2

300、如何检查您的电脑是否开启 ActiveDesktop?

在 IE4 及 IE5 中都有提供使用者选择是否安装 ActiveDeskTop 的功能,这个我们在 VB 中也可以侦测出来的!

首先,在表单声明区中声明以下二个 API Function:

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

接著,继续在表单声明区中加入以下模组:

Public Function ISActiveDesktop() As Boolean
Dim retVal As Long
retVal = FindWindow("Progman", vbNullString)
retVal = FindWindowEx(retVal, 0&, "SHELLDLL_DefView", vbNullString)
retVal = FindWindowEx(retVal, 0&, "Internet Explorer_Server", vbNullString)
If retVal > 0 Then
ISActiveDesktop = True
Else
ISActiveDesktop = False
End If
End Function

接著,在表单的 Form_Load 事件中加入以下程序码:

Private Sub Form_Load()
If ISActiveDesktop = True Then
MsgBox "您已启动 ActiveDesktop", 64, "检查 ActiveDesktop"
Else
MsgBox "您并没有使用 ActiveDesktop", 64, "检查 ActiveDesktop"
End If
End Sub

好了,现在您只要一启动程序,您就可以看到结果了!

上一页(60)下一页