重写了一个msgbox库 , 代码参考了win.dlg.message库
By
admin
at 2021-08-12 • 1人收藏 • 1751人看过
系统自带的msgbox挺简单好用, 但是不能设置弹出位置 , 有时候用起来会挡住后面一些重要的地方,
aardio里还有一个用plus写的win.dlg.message信息对话框库, 界面效果类似html弹窗.
有时候我们需要弹窗里响应[空格键]和[回车键]/[tab键]消息, 这样就需要对win.dlg.message库代码进行改造下, 所以我把这个库的代码复制出来进行了简单的修改, 使它能响应按键并且可以设置弹出位置, 用来适合当前的项目.

库 msgboxTest.aardio 代码如下:
import win.ui;
class msgBoxTest{
ctor( parent ){
this.parent = parent : ..win.getActive();
};
create = function(msg){
if(!#msg) error("文本不能为空",2);
var parentForm = this.parent;
if(parentForm){
if( !..win.isWindow(this.parent[["hwnd"]] || this.parent) ){
parentForm = ..win.getActive() || ..mainForm[["hwnd"]];
}
}
var winform = ..win.form(text="提示";right=251;bottom=120;border="thin";max=false;min=false;mode="popup";sysmenu=false;parent=parentForm)
if(!winform){
return;
}
winform.add(
btnCancel={cls="button";text="取消";left=127;top=83;right=248;bottom=116;tabstop=1;z=2};
btnOK={cls="button";text="下一步";left=4;top=83;right=125;bottom=116;default=1;tabstop=1;z=1};
message={cls="static";text=msg;left=0;top=0;right=252;bottom=78;align="center";bgcolor=0;color=65302;font=LOGFONT(h=-19);z=3}
)
..win.setFocus(winform.btnOK.hwnd);
winform.btnOK.oncommand = function(id,event){
winform.endModal(true);
}
winform.btnCancel.oncommand = function(id,event){
winform.endModal(false);
}
return winform;
}
show = function(msg,sw){
if(!#msg) error("文本不能为空",2);
var dlg = this.create(msg);
if(dlg) return dlg.show(sw);
}
doModal = function(msg,posx,posy){
if(!#msg) error("文本不能为空",2);
var dlg = this.create(msg);
if(!dlg) return;
if(posx !=null and posy!=null)
dlg.setPos(posx,posy);
return dlg.doModal();
}
Test = function(msg,posx,posy){
return this.doModal(msg,posx,posy);
}
}
msgBoxTest.install = function(){
..win.ui.ctrl.metaProperty.mixin({
msgTest = function(str,posx,posy){
return msgBoxTest(owner).Test( str,posx,posy );
};
})
}
msgBoxTest.install();使用的时候只需要简单的调用即可.
代码示例如下:
import console
console.open()
import msgBoxTest;
mainForm.button.oncommand = function(id,event){
console.log( mainForm.msgTest("XXX操作完成了吗?",300,500) );
}工程下载:
2022.11.13更新
将弹出位置改为设置一个控件作为参考, 将上面源码最后一行改为
msgBoxTest.install = function(){
..win.ui.ctrl.metaProperty.mixin({
msgTest = function(str,winform){
var rc = winform.getRect(true);
var posx = rc.left+(rc.width()/2 - 123);
var posy = rc.top+(rc.height()/2 - 92);
return msgBoxTest(owner).Test( str,posx,posy );
};
})
}使用的时候:
mainForm.msgTest(信息内容,mainForm.msglog)
这样就会在msglog这个控件的中心弹出窗口.
1 个回复 | 最后更新于 2022-06-12
登录后方可回帖
有空研究下,能不能插入图片