| 
									
										
										
										
											2024-12-11 15:08:57 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 文件名: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 | 
					
						
							|  |  |  |         }); | 
					
						
							| 
									
										
										
										
											2025-01-03 19:47:36 +08:00
										 |  |  |         Text_Obj.SetPosition(4, 1); | 
					
						
							| 
									
										
										
										
											2024-12-11 15:08:57 +08:00
										 |  |  |         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) { | 
					
						
							| 
									
										
										
										
											2024-12-20 21:52:35 +08:00
										 |  |  |         if (!this) return -1; | 
					
						
							| 
									
										
										
										
											2024-12-11 15:08:57 +08:00
										 |  |  |         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); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |