掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
APIのメッセージボックス (ID:102948)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> それで、どうにかしてメッセージボックスをループの処理の中で閉じたいと思っています。 メッセージボックスに拘らず、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
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.