创建、显示、和操作一个消息框,消息窗口有一个带关闭按钮的标题列、一个选项图标、一行或多行文字,以及最多四个按钮,以简短的应用程序特定的信息,如状态或错误信息等。 该消息框返回一个整数,指示用户单击了哪个按钮。
快手函数基本原型
win.msgbox( 消息,标题,样式,父窗口 )
|
说明:除第一个参数以外,其他参数可选。样式默认为 0x2000/*_MB_TASKMODAL*/
win.msgbox( "这是一个测试对话框", "对话框标题", 0x40/*_MB_ICONINFORMATION*/|0x3/*_MB_YESNOCANCEL*/)
|
注意:win.msgbox弹出的窗口默认是没有父窗口的(父窗口=0)
这就导致用户可以在任务栏切换其他窗口到弹出的消息对话框前面,而消息对话框又阻塞了线程,
导致前置的窗口不能响应用户的任何操作。
win.form类创建的对象提供msgbox成员函数,该函数可自动指定父窗口。
因此在窗体中,推荐使用窗体对象的的msgbox函数
如
import win.ui; /*DSG{{*/ var winform = win.form(parent=...; min=1;bottom=249;max=1;text="AAuto Form";right=349 ) winform.add( button={ bottom=131;text="button";left=110;right=219;top=79;z=0;cls="button"} ) /*}}*/
winform.button.oncommand = function(id,event){ winform.msgbox("你不可能把我折腾到父窗体后面去") }
winform.show(true) win.loopMessage();
|
函数拓展
ok = win.msgboxTest( 消息,标题,父窗口 )
|
说明:除第一个参数外,其他参数可选,该函数调用win.msgbox弹出一个带确定按钮、取消按钮的询问对话框,如果用户按确定返回true,否则返回false。
自动关闭消息框
win.msgboxTimeout("消息","标题",时间)
|
软件范例---自动关闭对话框
import win
win.msgboxTimeout("此对话框3秒后自动关闭","标题",3000) 样式 = 2 // 0、确认钮; 1、确认取消钮; 2、放弃重试忽略钮; 3、取消是否钮; 4、是否钮; 5、重试取消钮 ret = win.msgboxTimeout("此对话框3秒后自动关闭","标题",3000,样式) //返回值: 1、确定钮; 2、取消钮; 3、终止钮; 4、重试钮; 5、忽略钮; 6、是钮; 7、否钮
|
酷酷对话框(软件自带范例)
按钮样式及常量(可用【样式=数字】表示)
0、确定按钮; _MB_OK=@0x0
1、确定、取消按钮; _MB_OKCANCEL=@0x1
2、终止、重试、忽略按钮;_MB_ABORTRETRYIGNORE=@0x2
3、是、否、取消按钮;_MB_YESNOCANCEL=@0x3
4、是、否按钮;_MB_YESNO=@0x4
5、重试取消钮;_MB_RETRYCANCEL=@0x5
6、终止、重试、继续 0x00000006(需声明API才能使用)
图标常量
_MB_ICONASTERISK=@0x40/*_MB_ICONASTERISK*// “i”图标
_MB_ICONEXCLAMATION=@0x30/*_MB_ICONEXCLAMATION*// “!”号图标
_MB_ICONHAND=@0x10/*_MB_ICONHAND*/ / “×” 号图标
_MB_ICONINFORMATION=@0x40/*_MB_ICONINFORMATION*/ / “i” 图标
_MB_ICONMASK=@0xF0/*_MB_ICONMASK*/ / “i” 图标
_MB_ICONQUESTION=@0x20/*_MB_ICONQUESTION*// “?” 号图标
_MB_ICONSTOP=@0x10/*_MB_ICONSTOP*// “×” 号图标
按钮返回值
1=确定钮; IDOK
2=取消钮; IDCANCEL
3=终止钮; IDABORT
4=重试钮; IDRETRY
5=忽略钮;IDIGNORE
6=是钮;IDYES
7=否钮;IDNO
控制台验证按钮返回值
io.open();//打开控制台
import.win io.print(win.msgbox("询问用户的信息","标题" , 0x5/*_MB_RETRYCANCEL*/)); //或io.print(win.msgbox("询问用户的信息","标题" , 5);
execute("pause") //按任意键继续 io.close();//关闭控制台
|
在看一个例子
import win.ui;
/*DSG{{*/
var winform = win.form(parent=...; text="AAuto Form";right=349;bottom=249 )
winform.add( )
/*}}*/
res=(win.msgbox("询问用户的信息","标题" , 0x5/*_MB_RETRYCANCEL*/| 0x20/*_MB_ICONQUESTION*/ )!=4 )
if(
res=0 ){
//选择重试 win.msgbox("OK","AAuto")
}
else{ win.msgbox("NO","AAuto")
/*不符合条件时执行的代码块*/
}
return ;
winform.show()
win.loopMessage();
进阶篇:声明 api用法
快手包含大部分函数,也有极少部分没包含,此时就需要声明API函数,可见快手帮助示例:
//声明API调用示例 //===================================================== //导入DLL User32 := raw.loadDll("User32.dll"); //声明API函数 //声明函数原形的方式遵循C语法 messageBox := User32.api( "MessageBoxA", " void ( int hWnd, string lpText,string lpCaption ,INT uType )","stdcall") //最后一个参数可以省略
//使用API函数 messageBox( 0, "这是一个测试对话框", "对话框标题", 0x00004023 )
|
uTyp样式说明: 0x00004023 (在快手还可以这样写0x4023)
4 - 是帮助按钮(MB_HELP)【快手没有】
2 - 是图标 (分别是1,2,3,4)
3 - 是按钮(分别是1,2,3,4,5,6)
win-窗口库messagebox构造源码
var messageBox = u.api( "MessageBoxA", " int ( int hWnd, string lpText,string lpCaption ,INT uType )" )
var messageBoxTimeout = u.api("MessageBoxTimeoutA","int(int hwnd,string lpText,string lpCaption,int uType,int wlange,int dwTimeout)","stdcall") ;
msgbox = function(str,title = "AAuto" ,style ,parenthwnd=0 ){
style := 0x40 // _MB_OK|_MB_ICONINFORMATION;
if(!parenthwnd)
style |= 0x2000/*_MB_TASKMODAL*/
return messageBox( parenthwnd,tostring( str ) ,title,style );
}
msgboxTest = function(str,title ,parenthwnd=0){
return msgbox(str,title,0x1 | 0x20 /*_MB_OKCANCEL|_MB_ICONQUESTION*/ ,parenthwnd ) == 1;
}
msgboxTimeout = function(str,title = "AAuto" ,timeout =2000,style ,parenthwnd=0 ){
style := 0x40 // _MB_OK|_MB_ICONINFORMATION;
if(!parenthwnd)
style |= 0x2000/*_MB_TASKMODAL*/
return messageBoxTimeout( parenthwnd,tostring( str ) ,title,style,0,timeout );
}
函数原型及参数
var messageBox = u.api( "MessageBoxA", " int ( int hWnd, string lpText,string lpCaption ,INT uType )" )
hWnd:对话框父窗口句柄,对话框显示在Delphi窗体内,可使用窗体的Handle属性,否则可用0,使其直接作为桌面窗口的子窗口。
lpText:欲显示的信息字符串。
lpCaption:对话框标题字符串。
uType:对话框类型常量。
该函数的返回值为整数,用于对话框按钮的识别。