登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

面包会有的

... ...

 
 
 

日志

 
 

VB使用大全 - 5  

2007-09-08 14:19:13|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

84、为什么有的程序的画面或控制项总是闪个不停,如何避免?
原因很多,但最主要的原因是 '不停地改变一些可能不需要改变的控制项属性',这些属性通常是一些会造成控制项 Repaint 的属性,例如:Enabled, Visible, Contents 及 Text。如果某一个物件的属性已经是您要设定的值,那就不要再设定一次,如此便会大大降低控制项闪动的频率。例如:
If Not Command1.Enabled
Then Command1.Enabled=True
End If
以下是一个完成的 Module:
Sub SetEnabled (ctrlIn as Control, bSetting as Integer)
If ctrlIn.Enabled <> bSetting Then
ctrlIn.Enabled=bSetting
End If
End Sub
85、计算二个时间的时间差
VB 有提供一些好用的日期时间计算函数,但是没有一个计算时间差的功能,有些人会说有的,是 DateDiff,但是,DateDiff 功能却不够,您可以算出二个时间所差的总日数、总时数或总秒数,但您算不出是相差几天几小时几分钟又几秒钟!
以下这个模组的功能就是计算二个时间之时间差:
Function Convtime(date1 As Date, date2 As Date) As String
''功能 : 计算二个时间的时间差
''参数 : date1 是较早的时间, Variant (Date)。
' date2 是较晚的时间, Variant (Date)。
''若要计算两个日期之时间差,计算顺序是从 date1 到 date2
''返回值 : 时间差的组合字串, 例如 2年21天13小时5分钟3秒
'Dim wsecond As Long '总秒数 / 剩余秒数
Dim wminute As Long '总分钟数 / 剩余分钟数
Dim whour As Long '总时数 / 剩余时数
Dim wday As Long '总天数 / 剩余天数
Dim wyear As Long '总年数
wsecond = DateDiff("s", date1, date2) '总秒数
If wsecond > 60 Then
wminute = wsecond \ 60 '总分钟数
wsecond = wsecond Mod 60 '计算剩余秒数
End If
If wminute > 60 Then
whour = wminute \ 60 '总时数
wminute = wminute Mod 60 '计算剩余分钟数
End If
If whour > 24 Then
wday = whour \ 24 '总天数
whour = whour Mod 24 '计算剩余时数
End If
If wday > 365 Then
wyear = wday \ 365 '总年数
wday = wday Mod 365 '计算剩余天数
End If
'拼凑计算结果字串
If wyear > 0 Then Convtime = Convtime & wyear & "年"
If wday > 0 Then Convtime = Convtime & wday & "天"
If whour > 0 Then Convtime = Convtime & whour & "小时"
If wminute > 0 Then Convtime = Convtime & wminute & "分钟"
If wsecond > 0 Then Convtime = Convtime & wsecond & "秒"
End Function
当然,或许您要的结果不是我算出的字串,可能要算几周!但是只要将以上的程序稍作修改,就可以得到您要的结果!

86、处理加了密码的 Access 资料库

当 Access 资料库加了密码,直接由 Access 开启资料库时,会出现密码问话框,询问密码。但是若要由 VB 程序中开启,必须更改 VB 程序中开启资料库的指令,否则会出现错误讯息!以下针对各种状况,分别加以说明:
1、 使用 DAO 语法开启资料库:OpenDatabase
若要由程序中开启,语法如下:
Set DB = OpenDatabase(DatabaseName, False, False, ";Pwd=密码")
实例例如:
Dim db As Database
Set db = OpenDatabase("C:\db1.mdb", False, False, ";Pwd=1")
若要使用 Data 控制项,设定方法如下:
1、设定 DatabaseName 属性 (资料库名称 / 含路径)
2、设定 Connect 属性,将预设的字串 "Access" 改成 ";Pwd=密码" (不含双引号)
3、设定 RecordSource 属性 (资料集)
2、 使用 ADO 语法开启资料库:
在使用 ADODC 或 DataEnvironment 设定好连线之后,直接利用属性视窗修改 ConnectionString 属性(附属于 ADODC) 或 ConnectionSource 属性(附属于 DataEnvironment 的 Connection 物件),修改的方法是在属性之后增加以下参数:
;Jet OLEDB:Database Password=密码
除了 ADODC 及 DataEnvironment 之外, 直接使用 ADO 物件来开启含有密码的 mdb 资料库,设定参数的方法也是相同的。
3、 压缩加了密码的资料库:CompactDatabase
DBEngine.CompactDataBase "原资料库档名", "新资料库档名", , , ";pwd=密码"
实例例如:DBEngine.CompactDatabase "C:\Db1.mdb", "C:\Db2.mdb", , , ";pwd=1"
4、 修复加了密码的资料库: RepairDatabase
不必理会资料库设定的密码!
DBEngine.RepairDataBase "资料库档名"
实例例如:
DBEngine.RepairDataBase "C:\Db1.mdb"
87、如何取消 TextBox 鼠标右键的 PopupMenu 功能
自从 Microsoft Windows 进入 Windows95 之后,有一个很方便的功能,很多软件都有提供,就是鼠标右键的 PopupMenu 功能,它确实很方便,但是有时却是梦魇,那就是您不需要它的时候,它还是会自动出现!本例中的 TextBox 就是明显的例子。
但是这个梦魇从 VB5.0 以后就可以解决了,因为 VB5.0 提供了 AdressOf 这个运算子,可以做回呼(callback)处理!
请将以下的程序码放在 .bas 模组中,呼叫 Hook 这个 Sub 并传入 TextBox 的 hWnd 当作参数,但是切记您在 Unload Form 之前一定要呼叫 UnHook 这个 Sub,否则会产生一个 General Protection Fault!
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Const GWL_WNDPROC = -4
Public Const WM_RBUTTONUP = &H205
Public lpPrevWndProc As Long
Private lngHWnd As Long
Public Sub Hook(hWnd As Long)
lngHWnd = hWnd
lpPrevWndProc = SetWindowLong(lngHWnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub UnHook()
Dim lngReturnValue As Long
lngReturnValue = SetWindowLong(lngHWnd, GWL_WNDPROC, lpPrevWndProc)
End Sub
Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case uMsg
Case WM_RBUTTONUP
'Do nothing
'Or popup you own menuCase Else
WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
End Select
End Function
在 Form_Load 事件中加入以下程序码:
Call Hook(Text1.hWnd)
在 Form_Unload 中加入以下程序码:
Call UnHook
88、如何在 Menu 中加入美美的图案?
在模组中加入以下程序码:
Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Declare Function SetMenuItemBitmaps Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long
Public Const MF_BITMAP = &H4&
Type MENUITEMINFO
cbSize As Long
fMask As Long
fType As Long
fState As Long
wID As Long
hSubMenu As Long
hbmpChecked As Long
hbmpUnchecked As Long
dwItemData As Long
dwTypeData As String
cch As Long
End Type
Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Declare Function GetMenuItemInfo Lib "user32" Alias "GetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, _
ByVal b As Boolean, lpMenuItemInfo As MENUITEMINFO) As Boolean
Public Const MIIM_ID = &H2
Public Const MIIM_TYPE = &H10
Public Const MFT_STRING = &H0&
在 Form 中加入一个 PictureBox,属性设定为:
AutoSize = True
Picture = .bmp (尺寸大小为 13x13,不可设定为 .ico)
在 Form_Load 中的程序码如下:
Private Sub Form_Load()
'取得程序中 Mennu 的 handle
hMenu& = GetMenu(Form1.hWnd)
'取得第一个 submenu 的 handle
hSubMenu& = GetSubMenu(hMenu&, 0)
'取得 Submenu 第一个选项的 menuId
hID& = GetMenuItemID(hSubMenu&, 0)
'加入图片
SetMenuItemBitmaps hMenu&, hID&, MF_BITMAP, Picture1.Picture, Picture1.Picture
'在一个 Menu 选项中您一共可以加入二张图片
'一张是 checked 状态用,一张是 unchecked 状态用
End Sub
89、如何把小图片填满 Form 成为背景图?
对于这个问题,我看过很多方法,有的方法很麻烦,要声明一大堆 Type,用一大堆的 API,但是有一个最笨但我认为最好的方法如下: (就好像拼磁砖一样,不用任何 API, 不必声明任何 Type)
在 Form 中放一个 PictureBox,Picture 属性设定为某一张小图,AutoSize 属性性设定 True,完成的模组如下:
Sub PictureTile(Frm As Form, Pic As PictureBox)
Dim i As Integer
Dim t As Integer
Frm.AutoRedraw = True
Pic.BorderStyle = 0
For t = 0 To Frm.Height Step Pic.ScaleHeight
For i = 0 To Frm.Width Step Pic.ScaleWidth
Frm.PaintPicture Pic.Picture, i, t
Next i
Next t
End Sub
PictureTile 这个模组共有二个参数,第一个是表单名称,第二个则是 PictureBox 的名称。以下为一应用实例:
Private Sub Form_Load()
PictureTile Me, Picture1
End Sub
90、如何把小图片填满 MDIForm 成为背景图?
以下这个范例, 要:
1、一个 MDIForm:不必设定任何属性。
2、一个 Form1:不一定是 MDIChild,最好 MDIChild 为 False,但是 AutoRedraw 设成 True。
3、Form1 上面放一个隐藏的 PictureBox:名称为 Picture1,不必设定 Picture 属性。
4、一张图片的完整路径。
'将以下模组放入 MDIForm 的声明区中:
Sub TileMDIBkgd(MDIForm As Form, bkgdtiler As Form, bkgdfile As String)
If bkgdfile = "" Then Exit Sub
Dim ScWidth%, ScHeight%
ScWidth% = Screen.Width / Screen.TwipsPerPixelX
ScHeight% = Screen.Height / Screen.TwipsPerPixelY
Load bkgdtiler
bkgdtiler.Height = Screen.Height
bkgdtiler.Width = Screen.Width
bkgdtiler.ScaleMode = 3
bkgdtiler!Picture1.Top = 0
bkgdtiler!Picture1.Left = 0
bkgdtiler!Picture1.Picture = LoadPicture(bkgdfile)
bkgdtiler!Picture1.ScaleMode = 3

For n% = 0 To ScHeight% Step bkgdtiler!Picture1.ScaleHeight
For o% = 0 To ScWidth% Step bkgdtiler!Picture1.ScaleWidth
bkgdtiler.PaintPicture bkgdtiler!Picture1.Picture, o%, n%
Next o%
Next n%
MDIForm.Picture = bkgdtiler.Image
Unload bkgdtiler
End Sub
以下为一应用实例:
Private Sub MDIForm_Load()
TileMDIBkgd Me, Form1, "c:\windows\Tiles.bmp"
End Sub

91、如何让一个 app 永远保持在最上层 ( Normal on Top )
请在 Form 中放一个 Timer,Interval = 1000 (或更小),在 Timer 事件中加入以下程序码:
Private Sub Timer1_Timer()
Me.ZOrder
End Sub
不过这样子的 Form,只不过是一个 Normal Window。要产生真正 Topmost Window,就要使用 API 了!
92、关闭指定的程序
要做到像 Task Manager 一样,可以关闭指定的程序,方法如下:
在声明区中放入以下声明:(16位 改成 win31 API)
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_CLOSE = &H10
以下之范例示范如何关闭一个视窗标题 (Caption) 为 【小算盘】的程序:
Dim winHwnd As Long
Dim RetVal As Long
winHwnd = FindWindow(vbNullString, "小算盘")
Debug.Print winHwnd
If winHwnd <> 0 Then
RetVal = PostMessage(winHwnd, WM_CLOSE, 0&, 0&)
If RetVal = 0 Then
MsgBox "Error posting message."
End If
Else
MsgBox "并未开启小算盘程序."
End If
93、开启及关闭CD-Rom的门
在声明区中加入以下声明:
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
开启的程序代码如下:
retvalue = mciSendString("set CDAudio door open", returnstring, 127, 0)
关闭的程序代码如下:
retvalue = mciSendString("set CDAudio door closed", returnstring, 127, 0)
94、如何知道您的机器中预设印表机的机型、驱动程序及连接埠
想要抓取您机器中软硬件的资料,其实最方便的,就是直接从注册表中抓取,但是有些人对注册表有畏惧感!觉得注册表好像高深的样子。
其实虽然从 Windows95 以后 Microsoft 已经将 Win.ini 及 System.ini 的资料写到注册表中,但是由于 INI 档之使用已根深蒂固,所以 Microsoft 也不敢冒然废除 INI 档的使用,直到 Windows98 为止,一直都是二者并用,也就是有些资料,在写到注册的同时,也写了一份到 INI 档中!
目前讨论的主题就是一个例子,这三种资料都可从 Win.ini 中直接读取,结构如下:
[windows]
device=HP LASERJET 6P (TRADITIONAL),HPCXLAB,\\SUN\LJIIP2
device=印表机的机型, 驱动程序, 连接埠 (三种资料中间以逗点分开)
在声明区中加入以下声明: (16位 改成 win31 API)
Private Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long) As Long
程序代码如下:
AppName$ = "windows" 'Section 名称
KeyName$ = "device" 'Key 值名称
nSize% = 81 '预设返回值长度
RetStr$ = Space$(nSize%) '设定空白给预设返回值
NumChars% = GetProfileString(AppName$, KeyName$, NullStr$, RetStr$, nSize%)
' NumChars% 是实际返回值长度
koRetStr$ = Left$(RetStr$, NumChars%) '实际返回值
' Parse the string for specifics
'找寻第一个逗点的位置
CommaPos1% = InStr(1, RetStr$, ",")
'找寻第二个逗点的位置
CommaPos2% = InStr(CommaPos1% + 1, RetStr$, ",")
'印表机的机型
lblPrinter.Caption = Left$(RetStr$, CommaPos1% - 1)
'印表机的驱动程序
lblPrinterDriver.Caption = Mid$(RetStr$, CommaPos1% + 1, CommaPos2% - CommaPos1% - 1) & ".DRV"
'印表机的连接埠
lblPrinterPort.Caption = Mid$(RetStr$, CommaPos2% + 1)
95、如何判断二个日期是否为同一月份?
碰到这个问题,很多人第一个念头想到的就是『简单!只要使用 Month() 来判断就可以了』,但是这个方法却潜藏危机!为什么呢?例如:
Month(Date1) = 2
Month(Date2) = 2
以上的二个日期并不一定是同月份,就像 1999/02/01 和 2000/02/01 一样!
要怎样做才会正确呢?
要使用 DateDiff ("m", Date1, Date2) = 0 表示同一月份(年度当然也相同)
程序如下:
If DateDiff ("m", Date1, Date2) then
MsgBox "不同月份"
Else
MsgBox "同月份"
End If
96、如何让二个文字框同步联动?
要作到这个动作,有的人会想要用 KeyDown 或 KeyPress 事件来处理,但是这都是错的,虽然第二个文字框终究会动,但是总是比第一个文字框慢了一拍,永远会漏掉最后一个字!为什么呢?
因为由键盘输入时,程序接收的顺序为 KeyDown --> KeyPress --> KeyUp,而在 KeyPress 时,才会传入 Keyascii〈此点可由各事件中传入的参数得知〉转换成文字,所以在 KeyDown 时,还抓不到输入的字,在 KeyPress 时,只有 Keyascii 则需要转换才抓得到,但是中文比较麻烦!
在 KeyUp 时虽然已经可以抓到键入的值,但是我认为倒不如在 Change 事件中来得简单!不管 User 输入什么,只有第一个文字框资料异动时,才需要处理。
Private Sub Text1_Change()
Text2 = Text1
End Sub
如果不管第一个文字框输入什么,第二个文字框只要显示最后一个字,则程序要改成:
Private Sub Text1_Change()
Text2 = Right(Text1, 1)
End Sub
97、如何避免核取方块式的 ListBox 已选定的项目被更改?
当 ListBox 的 Style 设定成〈1-项目包含核取方块〉,ListBox 控制项以每一个文字项目跟随一个核取方块的方式显示。您可透过选取各项目边的核取方块以选择 ListBox 中的多个项目。
但有时候,您这样子设定的目的是为了显示一些事先选定的项目,例如从资料库中抓出的资料或是一些安装软件的设定选项确认画面。您不希望因为使用者再去点选 ListBox 的项目而更动原来设定的项目,这时候,您不能将 Enabled 属性设成 False,因为这样子卷动杆就无法卷动,使用者就无法看到 ListBox 的其他项目;您也无法像 TextBox 一样设定成 Lock 状态,因为 ListBox 没有 Lock 属性。
以下的程序代码可以解决这个问题,在 Form 中放一个 CommandButton 及一个 ListBox,将 ListBox 的 Style 设定成〈1-项目包含核取方块〉:
Dim isDisabled As Boolean '是否取消可选定状态
Private Sub Command1_Click()
isDisabled = Not isDisabled
End Sub
Private Sub List1_ItemCheck(Item As Integer)
If isDisabled Then
List1.Selected(Item) = Not List1.Selected(Item)
End If
End Sub
当 isDisabled 设定成 True 时,使用者一旦选定 ListBox 的某一个项目,程序会立即反转它的状态,看起来就像没改变过选定状态一样!而同时 ListBox 还是可以卷动!
98、如何隐藏及再显示鼠标
很简单,只用到了一个 ShowCursor API,参数也很简单,只有一个 bShow,设定值如下:
True:显示鼠标 / False:隐藏鼠标
Declare Function ShowCursor Lib "user32" Alias "ShowCursor" (ByVal bShow As Long) As Long
99、您是左撇子吗?交换鼠标的左右键!
很简单,只用到了一个 SwapMouseButton API,参数也很简单,只有一个 bSwap,设定值如下:
True:左右键互换 / False:恢复正常
Declare Function SwapMouseButton Lib "user32" Alias "SwapMouseButton" (ByVal bSwap As Long) As Long
假设我是左撇子,则程序为:
Dim RetVal As Long
RetVal = SwapMouseButton(True)
100、资料的加密 / 解密
以下二个模组,一个处理加密,一个处理解密,加密处理必须传入参数 (就是要加密的字串),加密后将资料存到加密文件,要解密时,则从文件案中读出并解密:
(假设文件案名称为 C:\加密文件.qwe, 您可以自行更改文件名或路径)
'处理加密
Private Function Encrypt(varPass As String)
If Dir("C:\加密文件.qwe") <> "" Then: Kill "C:\加密文件.qwe"
Dim varEncrypt As String * 50
Dim varTmp As Double
Open "C:\加密文件.qwe" For Random As #1 Len = 50
For I = 1 To Len(varPass)
varTmp = Asc(Mid$(varPass, I, 1))
varEncrypt = Str$(((((varTmp * 1.5) / 2.1113) * 1.111119) * I))
Put #1, I, varEncrypt
Next I
Close #1
End Function
'处理解密
Private Function Decrypt() As String
Open "C:\加密文件.qwe" For Random As #1 Len = 50
Dim varReturn As String * 50
Dim varConvert As Double

101、如何让 ComboBox 可以自动下拉?
以下状况假设我在 Form_Load 中自动下拉 Combo1.
'以下声明用于16位
Const WM_USER = &H400
Const CB_SHOWDROPDOWN = (WM_USER + 15)
Private Declare Function SendMessage Lib "User" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Any) As Long
'以下声明用于32位
Const CB_SHOWDROPDOWN = &H14F
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 Sub Form_Load()
Combo1.AddItem "11111"
Combo1.AddItem "22222"
Combo1.AddItem "33333"
Combo1.AddItem "44444"
Combo1.AddItem "55555"
Combo1.AddItem "66666"
'Form_Load 即自动下拉 Combo1
Dim nret As Long
nret = SendMessage(Combo1.hwnd, CB_SHOWDROPDOWN, 1, ByVal 0&)
End Sub
102、如何从您的应程序中结束 Windows 重开机?
很多软件在 Setup 完之后都会自动关机重开机,以便让某些设定值可以生效,其实这个功能很简单,只要几行指令就可以做到了!
关键就是要使用 ExitWindowsEx 这个 API,这个 API 只有二个参数,第一个参数是一个 Flag,目的是要告诉 Windows 要以什么方式关机,在下面的声明中会列出可用的 Flag 常数值,至于第二个参数则是一个保留值,只要设定成 0 就可以了。
很重要的一点是:如果您想要让关机动作更顺利,记得要 Unload 您的程序!
'在声明区中 (Bas Module / Form Module) 加入以下声明:
Public Const EWX_LOGOFF = 0 '这四个常数值可以并用
Public Const EWX_SHUTDOWN = 1
Public Const EWX_REBOOT = 2
Public Const EWX_FORCE = 4
Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
'实例:如果您想强迫关机重开机,程序码如下:
ret = ExitWindowsEx(EWX_FORCE OR EWX_REBOOT, 0)
103、我要如何用 VB 来拨电话? (不用 MSCOMM32.OCX )
这个问题很多人问,也很多人回答,答案千篇一律,都说是使用 MSCOMM32.OCX,但是,您知道吗?如果您只是想拨号而已,根本就不用使用 MSCOMM32.OCX 这个控制项!
我忘了是从 Windows95 开始,或是 Windows3.1 就有了,Microsoft Windows 就提供了【电话拨号员】这个工具程序,在 Windows98 中的位置是 【开始】【程序集】【附属应用程序】【通讯】【电话拨号员】,如果找不到的话,表示您在安装 Windows95/98 时并未选择安装【电话拨号员】,您只要再执行 Windows 安装程序,选择【通讯】【电话拨号员】即可!
没错!看完以上的说明,您应该知道我们就是要使用【电话拨号员】,请在声明区中加入以下声明及模组:
Private Declare Function tapiRequestMakeCall Lib "TAPI32.DLL" (ByVal Dest As String, ByVal AppName As String, ByVal CalledParty As String, ByVal Comment As String) As Long
Public Sub PhoneCall(sNumber As String, sName As String)
Dim lRetVal As Long
lRetVal = tapiRequestMakeCall(Trim$(sNumber), App.Title, Trim$(sName), "")
If lRetVal <> 0 Then
MsgBox "不能拨号, 请采取其他行动"
End If
End Sub
'以上的 PhoneCall 是一个已经完成的模组,就是用来拨号的,它有二个参数:
'第一个参数是电话号码,是指对方的电话号码。
'第二个参数是对方的姓名或代号。
'以下是一个应用实例,要拨号给电话号码为 "27058181" 的 "纪文和":
Private Sub Command1_Click()
PhoneCall "27058181", "纪文和"
End Sub

  评论这张
 
阅读(684)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018