/* 文件名: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, 1); 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 (!this) return -1; 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, WindowInteractiveFlag) { 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); } } }