Home of site/Basic Macro General

Macroの杜(LibreOffice Basic編 / General)


Windows API(user32.dll)を用いたMessagebox
< 戻る

GBO-)[General]Messagebox
【picture】実行結果

Win32 API(user32.dll) の Messagebox を用いたメッセージボックスです。

・ボタン、アイコンなどのフラグ
・戻り値
・アイコン画像
は MicrosoftのM公式サイトを参照ください。

フラグを組み合わせる時は OR で繋ぎます。
------------------------------ [ Sample Code ] ------------------------------


Declare Function MessageBox Lib "user32.dll"(ByVal hWnd As Long, ByVal msgC As String, ByVal msgT As String, ByVal uType As Long) As integer

'ボタンフラグ
'Public Const MB_OK = &H0  '((DWORD)0x00000000L)
'Public Const MB_OKCANCEL = &H1  '((DWORD)0x00000001L)
Public Const MB_ABORTRETRYIGNORE = &H2  '((DWORD)0x00000002L)

'アイコン
Public Const MB_ICONWARNING = &H30  '((DWORD)0x00000030L)

'最前面フラグ
Public Const MB_TOPMOST = &H40000

Sub oDeclare()
    Dim oRET As Integer
    Dim oMsgTxt as String, oTitle as String
    Dim oType as Long
    	oMsgTxt = "user32.dll によるMessage Boxです"
    	oTitle = "Win API"
    	oType =  MB_ABORTRETRYIGNORE OR MB_TOPMOST OR MB_ICONWARNING
    	
    'API MSGBOX TEST
    oRET = TopMostMsgBox(oMsgTxt, oTitle,oType)
    MsgBox(oRET,0,"LO7.5.7.1")
End Sub

Function TopMostMsgBox(msgC As String, msgT As String, fType As Long) as Integer
	Dim oRtn As Integer
    	oRtn = MessageBox(0, msgC, msgT, fType)
	TopMostMsgBox = oRtn
End Function

GBO-)[General]MessageboxA
【picture】実行結果

Win32 API(user32.dll) の マルチバイト文字を受ける
MessageBoxA関数を用いたメッセージボックスです。

・ボタン、アイコンなどのフラグ
・戻り値
・アイコン画像
は Microsoftの公式サイトを参照ください。

フラグを組み合わせる時は OR で繋ぎます。

参考:ゼロからはじめるWindows API - MessageBoxA 関数と MessageBoxW 関数編
------------------------------ [ Sample Code ] ------------------------------


Declare Function MessageBoxA Lib "user32.dll"(ByVal hWnd As Long, ByVal msgC As String, ByVal msgT As String, ByVal uType As Long) As integer

'ボタンフラグ
'Public Const MB_OK = &H0  '((DWORD)0x00000000L)
Public Const MB_OKCANCEL = &H1  '((DWORD)0x00000001L)
'Public Const MB_ABORTRETRYIGNORE = &H2  '((DWORD)0x00000002L)

'アイコン
Public Const MB_ICONINFORMATION  = &H40  '((DWORD)0x00000040L)

'最前面フラグ
Public Const MB_TOPMOST = &H40000

Sub oDeclare()
    Dim oRET As Integer
    Dim oMsgTxt as String, oTitle as String
    Dim oType as Long
    	oMsgTxt = "user32.dll によるMessage Boxです"
    	oTitle = "Win API"
    	oType =  MB_OKCANCEL OR MB_TOPMOST OR MB_ICONINFORMATION
    	
    'API MSGBOX TEST
    oRET = TopMostMsgBox(oMsgTxt, oTitle,oType)
    MsgBox(oRET,0,"LO7.5.7.1")
End Sub

Function TopMostMsgBox(msgC As String, msgT As String, fType As Long) as Integer
	Dim oRtn As Integer
    	oRtn = MessageBoxA(0, msgC, msgT, fType)
	TopMostMsgBox = oRtn
End Function

GBO-)[General]MessageboxW
【picture】実行結果

Win32 API(user32.dll) の ワイド文字を受ける 
MessageBoxW() 関数を用いたメッセージボックスです。
内部では 入力値の文字コードは ANSI、出力値の文字コードは
 Unicodeなので、文字化けしていることがわかります。

LibreOffice Basicでは 文字コードの変換の関数は
容易ではないので、unicode文字を取り扱う時に使うと
良いでしょう。(※)
 ※ PythonマクロやJavaScriptマクロでは変換可能です。

・ボタン、アイコンなどのフラグ
・戻り値
・アイコン画像
は Microsoftの公式サイトを参照ください。

フラグを組み合わせる時は OR で繋ぎます。

参考:ゼロからはじめるWindows API - MessageBoxA 関数と MessageBoxW 関数編
------------------------------ [ Sample Code ] ------------------------------


Declare Function MessageBoxW Lib "user32.dll"(ByVal hWnd As Long, ByVal msgC As String, ByVal msgT As String, ByVal uType As Long) As integer

'ボタンフラグ
Public Const MB_YESNOCANCEL = &H3  '((DWORD)0x00000003L)

'アイコン
Public Const MB_ICONQUESTION  = &H20  '((DWORD)0x00000020L)

'最前面フラグ
Public Const MB_TOPMOST = &H40000

Sub oDeclare()
    Dim oRET As Integer
    Dim oMsgTxt as String, oTitle as String
    Dim oType as Long
    	oMsgTxt = "user32.dll によるMessage Boxです"
    	oTitle = "Win API"
    	oType =  MB_YESNOCANCEL OR MB_TOPMOST OR MB_ICONQUESTION
    	
    'API MSGBOX TEST
    oRET = TopMostMsgBox(oMsgTxt, oTitle,oType)
    MsgBox(oRET,0,"LO7.5.7.1")
End Sub

Function TopMostMsgBox(msgC As String, msgT As String, fType As Long) as Integer
	Dim oRtn As Integer
    	oRtn = MessageBoxW(0, msgC, msgT, fType)
	TopMostMsgBox = oRtn
End Function

inserted by FC2 system