こんにちは。
いつもお世話になっています。
APIのメッセージボックスはプログラムを止めないって聞いたことがあります。
タイマーでループしながら処理するプログラムを作っているんですが、処理を止めたくないので、APIのメッセージボックスを使いたいと思います。
それで、どうにかしてメッセージボックスをループの処理の中で閉じたいと思っています。
これって可能なのでしょうか?
ヒントだけでも教えてもらえないでしょうか。
宜しくお願いします。
VB6(SP6)、Win7です。
> それで、どうにかしてメッセージボックスをループの処理の中で閉じたいと思っています。
メッセージボックスに拘らず、Form で自作するようにしましょう。
そうすれば、Unload ステートメントや Hide メソッドが使えますよね。
> APIのメッセージボックスはプログラムを止めないって聞いたことがあります。
MessageBox API の事を仰っているのだとしたら、
MsgBox 関数と動作は一緒ですよ。
異なるのは、開発環境で実行した場合の動作と、
Unicode 文字の使用可否だけです。
' Timer1、Command1〜3、Label1 を貼っておいてください。
Option Explicit
Private Declare Function MessageBox _
Lib "USER32" Alias "MessageBoxW" _
(ByVal hWnd As OLE_HANDLE _
, ByRef pszText As Byte _
, ByRef pszCaption As Byte _
, ByVal uType As VbMsgBoxStyle _
) As VbMsgBoxResult
Private NiHao As String
Private Sub Command1_Click()
MsgBoxAPI "APIにて表示" & vbCrLf & NiHao, vbInformation
End Sub
Private Sub Command2_Click()
MsgBox "標準関数で表示" & vbCrLf & NiHao, vbInformation
End Sub
Private Sub Command3_Click()
MsgBox "標準関数で表示" & vbCrLf & NiHao, vbInformation
End Sub
Private Sub Timer1_Timer()
Label1.Caption = Format(Now, "yyyy\/MM\/dd HH:mm:ss") _
& Format(Timer - DateDiff("s", Date, Now), ".0000000")
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Timer1.Enabled = False
End Sub
Private Sub Form_Load()
Timer1.Interval = 10
NiHao = ChrW(&H4F60) & "好"
Label1.Caption = "(タイマー)"
Command1.Caption = "MessageBox API"
Command2.Caption = "MsgBox/IDE"
Command3.Caption = "MsgBox/EXE"
If IsDebug() Then
Command2.Enabled = True
Command3.Enabled = False
Else
Command2.Enabled = False
Command3.Enabled = True
End If
Timer1.Enabled = True
End Sub
Private Function MsgBoxAPI(ByVal sMessage As String _
, Optional ByVal style As VbMsgBoxStyle = vbOKOnly _
, Optional ByVal sCaption As String = vbNullString _
) As VbMsgBoxResult
Dim msg() As Byte
Dim cap() As Byte
msg = sMessage & vbNullChar
If sCaption = vbNullString Then
cap = App.Title & vbNullChar
Else
cap = sCaption & vbNullChar
End If
Dim h As OLE_HANDLE
If Not Screen.ActiveForm Is Nothing Then
h = Screen.ActiveForm.hWnd
End If
MsgBoxAPI = MessageBox(h, msg(0), cap(0), style)
End Function
Private Function IsDebug() As Boolean
On Error Resume Next
Debug.Print 0 \ 0
IsDebug = (Err.Number <> 0)
End Function