您的位置:首页 > 其它

MsgBox若干秒后自动关闭的方法

2008-10-02 19:35 561 查看
主題:如何設定 MsgBox 在若干時間之後若無回應則自動關閉?
來源:Ask the Visual Basic Pro
版本:VB6 / VB5 / VB4-32

--------------------------------------------------------------------------------

在我們的印象中,VB 所提供的 MsgBox 是一個強制回應的視窗,您一定要按了其中的某一個 CommandButton 之後,它才會關閉!但是在某些軟体中,我們會看到,明明是使用系統的 MsgBox,可是您如果不理它,幾秒鐘之後,它就自行關閉了!別人是如何做到的呢?這個問題偶而會出現在討論區中,有的人會回答:

只要自己做一個類似 MsgBox 的視窗,就可以自己用 Timer 來控制這個視窗何時要關閉了!

但是,其實不用這麼麻煩的,只要使用系統的 MsgBox 再加一個 Timer 就可以控制了!

我們都知道 MsgBox 可以設定成很多不同的樣子,可以有很多不同的圖示,不同的按鈕,其中控制按鈕的部份,可以設定的常數如下:

常數 值 說明
vbOKOnly 0 只顯示 OK 按鈕。
VbOKCancel 1 顯示 OK 及 Cancel 按鈕。
VbAbortRetryIgnore 2 顯示 Abort、 Retry 及 Ignore 按鈕。
VbYesNoCancel 3 顯示 Yes、No 及 Cancel 按鈕。
VbYesNo 4 顯示 Yes 及 No 按鈕。
VbRetryCancel 5 顯示 Retry 及 Cancel 按鈕。

為什麼要特別提到 MsgBox 的常數呢?因為下面我們要告訴您的方法,還是有一點點限制的!當您設定的常數是 VbAbortRetryIgnore 或 VbYesNo 時,下面的方法也是沒用的!

'在表單的宣告區中加入以下的宣告

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

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 Const WM_CLOSE = &H10
Private Const MsgTitle As String = "Test Message"
'在表單中加入一個 CommandButton 及一個 Timer 控制項,加入以下程式碼:

Private Sub Command1_Click()
Dim nRet As Long
Timer1.Interval = 3000
Timer1.Enabled = True
nRet = MsgBox("若您不回應的話,3 秒後此 MsgBox 會自動關閉", 64, MsgTitle)
Timer1.Enabled = False
End Sub

Private Sub Timer1_Timer()
Dim hWnd As Long
hWnd = FindWindow(vbNullString, MsgTitle)
Call SendMessage(hWnd, WM_CLOSE, 0, ByVal 0&)
End Sub
好了,很簡單吧!您執行程式時,當 MsgBox 出現 3 秒之後,就會自動關閉了!
注意:此方法的限制說明:

1、當常數設定為 VbAbortRetryIgnore 或 VbYesNo 時,無效!
2、在 Design Time 時,無效,必須 Make EXE 之後才有效!

已经不知道出处,从这个帖子中粘贴下来

http://topic.csdn.net/t/20040506/18/3036843.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: