【快手笔记】弹出消息框messagebox(win.mesgbox) - 快手软件

时间:2024-03-04 21:50:08

【快手笔记】弹出消息框messagebox(win.mesgbox)

创建、显示、和操作一个消息框,消息窗口有一个带关闭按钮的标题列、一个选项图标、一行或多行文字,以及最多四个按钮,以简短的应用程序特定的信息,如状态或错误信息等。 该消息框返回一个整数,指示用户单击了哪个按钮。

 

快手函数基本原型

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  )

  
ifres=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:对话框类型常量。
 该函数的返回值为整数,用于对话框按钮的识别。