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
好了,现在您只要一启动程序,您就可以看到结果了! |