计算器

光庆 6天前 235

代码改编自风行者的教程,采用了非常规方式定义按钮和事件函数,不一定适合初学者,仅供参考。

import win.ui;
/*DSG{{*/
var winform = win.form(text="计算器";right=271;bottom=374;border="dialog frame";max=false)
winform.add(
edit={cls="edit";left=12;top=11;right=260;bottom=52;align="right";edge=1;font=LOGFONT(h=-19);multiline=1;z=1}
)
/*}}*/
var strs = string.split("C%^+789-456*123/0.⌫=","");
for(i=0;19;1){
    winform.addCtrl( 
        ['btn'++i] = {
            cls="button";text=i===2?"**":strs[i+1];autoResize=false;font=LOGFONT(h=-19);z=1;
            left=i%4*66+12;right=i%4*66+62;top=math.floor(i/4)*60+70;bottom=math.floor(i/4)*60+120;
            oncommand = function(id,event){
                winform.edit.text = owner.text==="="?eval(winform.edit.text):
                					owner.text==="C"?"":
                    				owner.text==="⌫"?..string.left(winform.edit.text,-2):
                    				winform.edit.text++owner.text;
            }
        };
    )
}
winform.show();
win.loopMessage();


最新回复 (7)
  • 近我者赤 6天前
    0 2

  • 近我者赤 6天前
    0 3

    大佬,我用批量添加的button,为什么你的那个给按钮定义的事件函数就不行了呢??

    import win.ui;
    /*DSG{{*/
    var winform = win.form(text="计算器";right=271;bottom=374;border="dialog frame";max=false)
    winform.add(
    edit={cls="edit";left=12;top=11;right=260;bottom=52;align="right";edge=1;font=LOGFONT(h=-19);multiline=1;z=1}
    )
    /*}}*/
    
    var codetxt="C%^+789-456*123/0.⌫="
    var strs=string.split(codetxt,"");
    for(i=0;4;1){
    	for(j=0;3;1){
    		winform.addCtrl( 
    			['btn'++i++j] = { 
    				cls="button";text=strs[i*4+j+1];id=123;autoResize=false;font=LOGFONT(h=-19);z=1;
    				left=12+j*66;right=62+j*66;top=70+i*60;bottom=120+i*60;
    			}; 
    		)	
    	if winform['btn'++i++j].text=="^" winform['btn'++i++j].text="**";
    	}
    	
    }
    for(name,ctrl in winform.eachControl("button") ){
        ctrl.oncommand = function(id,event){
            select(owner.text) {
                case "=" {
                    winform.edit.text = eval(winform.edit.text);
                }
                case "C" {
                    winform.edit.text = "";
                }
                case "⌫" {
                    winform.edit.text = ..string.left(winform.edit.text,-2);
                }else {
                    winform.edit.text ++= owner.text;
                }
            }
        }
    }
    
    
    winform.show();
    win.loopMessage();


  • 光庆 6天前
    1 4
    近我者赤 大佬,我用批量添加的button,为什么你的那个给按钮定义的事件函数就不行了呢??import win.ui; /*DSG{{*/ var winform&am ...
    把 id=123 删除
  • 光庆 6天前
    1 5
    近我者赤 大佬,我用批量添加的button,为什么你的那个给按钮定义的事件函数就不行了呢??import win.ui; /*DSG{{*/ var winform&am ...
    import win.ui;
    /*DSG{{*/
    var winform = win.form(text="计算器";right=271;bottom=374;border="dialog frame";max=false)
    winform.add(
    edit={cls="edit";left=12;top=11;right=260;bottom=52;align="right";edge=1;font=LOGFONT(h=-19);multiline=1;z=1}
    )
    /*}}*/
    var codetxt="C%^+789-456*123/0.⌫="
    var strs=string.split(codetxt,"");
    for(i=0;4;1){
        for(j=0;3;1){
            winform.addCtrl( 
                ['btn'++i++j] = { 
    				cls="button";text=strs[i*4+j+1];autoResize=false;font=LOGFONT(h=-19);z=1;
    				left=12+j*66;right=62+j*66;top=70+i*60;bottom=120+i*60;
    				oncommand = function(id,event){
            			select(owner.text) {
                			case "=" {
                    			winform.edit.text = eval(winform.edit.text);
                			}
                			case "C" {
                    			winform.edit.text = "";
                			}
                			case "⌫" {
                    			winform.edit.text = ..string.left(winform.edit.text,-2);
                			}
                			else {
                    			winform.edit.text ++= owner.text;
                			}
            			}
        			}                
                }; 
            )    
        	if winform['btn'++i++j].text=="^" winform['btn'++i++j].text="**";
        }
        
    }
    winform.show();
    win.loopMessage();


  • 近我者赤 6天前
    0 6

    大佬出手,问题无忧

  • mndsoft 2天前
    0 7
    太牛B了,堪称世界第一简洁
  • 近我者赤 1天前
    0 8

    24行,更简洁了

返回