109 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			109 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								文件名:InputBox.nut
							 | 
						||
| 
								 | 
							
								路径:User/UI/Widget/InputBox.nut
							 | 
						||
| 
								 | 
							
								创建日期:2024-12-02	09:55
							 | 
						||
| 
								 | 
							
								文件用途:输入框
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								//基础按钮
							 | 
						||
| 
								 | 
							
								class Yosin_InputBox extends Yosin_CommonUi {
							 | 
						||
| 
								 | 
							
								    //状态
							 | 
						||
| 
								 | 
							
								    State = 0;
							 | 
						||
| 
								 | 
							
								    //是否焦点
							 | 
						||
| 
								 | 
							
								    IsFocus = false;
							 | 
						||
| 
								 | 
							
								    //内容
							 | 
						||
| 
								 | 
							
								    str = "";
							 | 
						||
| 
								 | 
							
								    sliceCode = "|";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    InputController = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    //宽度
							 | 
						||
| 
								 | 
							
								    DWidth = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    //文本对象
							 | 
						||
| 
								 | 
							
								    Text_Obj = null;
							 | 
						||
| 
								 | 
							
								    //Path
							 | 
						||
| 
								 | 
							
								    Path = "sprite/interface/lenheartwindowcommon.img";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    constructor(X, Y, W) {
							 | 
						||
| 
								 | 
							
								        this.DWidth = W;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        base.constructor(X, Y, W, 20);
							 | 
						||
| 
								 | 
							
								        local FillCount = DWidth;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        local HeaderSp = CL_SpriteObject(Path, 63);
							 | 
						||
| 
								 | 
							
								        Addchild(HeaderSp);
							 | 
						||
| 
								 | 
							
								        for (local i = 0; i< FillCount; i++) {
							 | 
						||
| 
								 | 
							
								            local MiddleSp = CL_SpriteObject(Path, 64);
							 | 
						||
| 
								 | 
							
								            MiddleSp.SetPosition(i + 3, 0);
							 | 
						||
| 
								 | 
							
								            Addchild(MiddleSp);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        local TailSp = CL_SpriteObject(Path, 65);
							 | 
						||
| 
								 | 
							
								        TailSp.SetPosition(FillCount + 3, 0);
							 | 
						||
| 
								 | 
							
								        Addchild(TailSp);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        Text_Obj = TextActor(0, {
							 | 
						||
| 
								 | 
							
								            color = 0xFFFFFFFF
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								        Text_Obj.SetPosition(4, 3);
							 | 
						||
| 
								 | 
							
								        Addchild(Text_Obj);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        _Imm_Input_Func_.rawset(C_Object, Imm_Input.bindenv(this));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    //闪烁时间
							 | 
						||
| 
								 | 
							
								    FlushTime = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function SliceCodeFlicker(Dt) {
							 | 
						||
| 
								 | 
							
								        FlushTime += Dt;
							 | 
						||
| 
								 | 
							
								        if (FlushTime >= 500) {
							 | 
						||
| 
								 | 
							
								            FlushTime = 0;
							 | 
						||
| 
								 | 
							
								            if (sliceCode.len() > 0) sliceCode = "";
							 | 
						||
| 
								 | 
							
								            else if (sliceCode.len() == 0) sliceCode = "|";
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    //判断是否中文字符
							 | 
						||
| 
								 | 
							
								    function IsChineseChar(code) {
							 | 
						||
| 
								 | 
							
								        return (code & 0x80) != 0;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    //接收文本数据
							 | 
						||
| 
								 | 
							
								    function Imm_Input(str) {
							 | 
						||
| 
								 | 
							
								        if (!IsFocus) return;
							 | 
						||
| 
								 | 
							
								        //退格键
							 | 
						||
| 
								 | 
							
								        if (str == "\b") {
							 | 
						||
| 
								 | 
							
								            if (this.str.len() > 0) {
							 | 
						||
| 
								 | 
							
								                this.str = Sq_RemoveStringLast(this.str);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            return;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        this.str += str;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    //同步文本对象数据
							 | 
						||
| 
								 | 
							
								    function SyncText() {
							 | 
						||
| 
								 | 
							
								        Text_Obj.SetText(str + sliceCode);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function Proc(Dt) {
							 | 
						||
| 
								 | 
							
								        if (IsFocus) SliceCodeFlicker(Dt);
							 | 
						||
| 
								 | 
							
								        else sliceCode = "";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        SyncText();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    //鼠标左键单击回调
							 | 
						||
| 
								 | 
							
								    function OnMouseLbClick(MousePos_X, MousePos_Y) {
							 | 
						||
| 
								 | 
							
								        local Pos = GetWorldPosition();
							 | 
						||
| 
								 | 
							
								        if (Math.IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, Pos.x, Pos.y, Width, Height)) {
							 | 
						||
| 
								 | 
							
								            if (OnClick) OnClick(this);
							 | 
						||
| 
								 | 
							
								            IsFocus = true;
							 | 
						||
| 
								 | 
							
								            sliceCode = "|";
							 | 
						||
| 
								 | 
							
								            Sq_SetImmEnabled(true);
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            IsFocus = false;
							 | 
						||
| 
								 | 
							
								            sliceCode = "";
							 | 
						||
| 
								 | 
							
								            Sq_SetImmEnabled(false);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |