import win.ui; /*DSG{{*/ var winform = win.form(parent=...; text="aardio Form";right=349;bottom=249 ) winform.add( edit={ bottom=128;right=256;left=88;top=104;font=LOGFONT( name="宋体";h=-12 );z=1;text="";edge=1;cls="edit" } ) /*}}*/ //监视传递给edit的所有消息,并针对需要干预的情况做处理 winform.edit.wndproc = function(hwnd,message,wParam,lParam){ //如果有_WM_CHAR消息传给edit if (message == 0x102/*_WM_CHAR*/) { //如果字符的ASCII码大于等于0或等于小于9 if (wParam >= '0'# && wParam <= '9'#) { //返回空,即按系统默认的方法继续(不干预系统的正常流程) return; } //选择wParam参数,针对它的不同值处理 select wParam { //为"-"的ASC码的时候 case '-'# { //如果edit控件中没有任何字符,-只能在最前面 if (#winform.edit.text == 0) //返回空,即按系统默认的方法继续(不干预系统的正常流程) return; } case '.'# { //如果edit控件中匹配不到小数点并且能匹配到数字(因为小数点只能有一个并且必须跟在数字后面) if ( ! string.match(winform.edit.text, "\.") and string.match(winform.edit.text, "\d")) return; } //对于删除键,等控制键不干预不处理 case 0x8/*_VK_BACK*/, 0xD/*_VK_RETURN*/, 0x2E/*_VK_DELETE*/ { return; } } //其它字符录入一概阻断 return 1; } } winform.show(); win.loopMessage();