/* 文件名:NumberInputBox.nut 路径:User/UI/Widget/NumberInputBox.nut 创建日期:2025-02-07 20:31 文件用途:数字输入框 */ class Yosin_NumberInputBox extends Yosin_CommonUi { //框背景 BoxBackground = null; //文本 TextObject = null; Text = "0"; //输入光标 InputCursor = null; //输入位置 InputPos = 0; //是否获取焦点 IsFocus = false; constructor(w, h) { base.constructor(0, 0, w, h); //输入框 BoxBackground = Yosin_NineBoxStretch(w, h, "sprite/interface/newstyle/windows/chatting/chatting_ver4.img", 265); BoxBackground.SetPosition(0, 0); Addchild(BoxBackground); //文本 TextObject = Yosin_Mininumber(null); TextObject.SetPosition(6, 5); Addchild(TextObject); //输入光标 InputCursor = CreateCursor(); InputCursor.SetUpdateFunc(function(Object, Dt) { //处于焦点中执行 if (IsFocus) { //光标闪烁逻辑 { if (!(Object.Var.rawin("TimeFlag"))) { Object.Var.TimeFlag <- 0; Object.Var.VisibleFlag <- false; } Object.Var.TimeFlag += Dt; if (Object.Var.TimeFlag >= 500) { Object.Var.TimeFlag <- 0; Object.SetVisible(Object.Var.VisibleFlag); Object.Var.VisibleFlag <- !Object.Var.VisibleFlag; } } //同步光标位置逻辑 { Object.SetPosition(TextObject.X + TextObject.DrawTextWidth, 4); } } }.bindenv(this)); Addchild(InputCursor); _Imm_Input_Func_.rawset(C_Object, Imm_Input.bindenv(this)); } //判断是否中文字符 function IsChineseChar(code) { return (code & 0x80) != 0; } //接收文本数据 function Imm_Input(str) { if (!this) return -1; if (!IsFocus) return; //退格键 if (str == "\b") { if (this.Text.len() > 0) { this.Text = Sq_RemoveStringLast(this.Text); } } //只记录数字 else if (regexp("[0-9]").match(str)) { if (this.Text.tointeger()< 9999999999999) { if (this.Text == "0") this.Text = str; else this.Text += str; } else this.Text = "9999999999999"; } //同步数字数据 TextObject.SetNumber(this.Text); //每次设置文本时确保光标显示 InputCursor.SetVisible(true); InputCursor.Var.TimeFlag <- 0; InputCursor.Var.VisibleFlag <- false; } function CreateCursor() { local Canvas = CL_CanvasObject(); // 重设大小并清空 Canvas.ResizeAndClear(1, 15); // 开始绘制 Canvas.BeginDraw(); Canvas.SetFillBrush(sq_RGBA(255, 255, 255, 250)); Canvas.SetStrokeBrush(sq_RGBA(255, 255, 255, 250)); Canvas.DrawLine(1, 1, 1, 10); // 结束绘制 Canvas.EndDraw(); Canvas.SetVisible(false); return Canvas; } //鼠标左键单击回调 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)) { SetFocus(true); } else { SetFocus(false); } } //设置焦点模式 function SetFocus(Flag) { IsFocus = Flag; InputCursor.SetVisible(Flag); Sq_SetImmEnabled(Flag); } //设置数字 function SetNumber(Number) { if (Number< 0) return; this.Text = Number.tostring(); TextObject.SetNumber(this.Text); } //获取数字 function GetNumber() { return this.Text.tointeger(); } }