#Requires AutoHotkey v2.0 arr := [ ["姓名", "name", "default"], ["性别", "sex", ["男","女"]], ["年龄", "nAge", "20"], ] objOpt := inputOption(arr, "提示") msgbox(json.stringify(objOpt, 4)) ; https://www.cnblogs.com/hyaray/p/15773288.html ;arr的子数组 ;1.提示文字 ;2.变量名 ; n+大写字母则强制为数字 ;3.默认值] ; 数组,则控件为 AddComboBox ;bOne 表示限制单结果,则会在 Edit内容改变时,清空其他控件 inputOption(arr, sTips:="", bOne:=false) { oGui := gui() oGui.OnEvent("escape", doEscape) oGui.OnEvent("close", doEscape) oGui.SetFont("cRed s22") if strlen(sTips) oGui.AddText("x10", sTips . "`n") oGui.SetFont("cDefault s13") funOpt := (x)=>"ys w200 v" . x focusCtl := "" for a in arr { oGui.AddText("x10 section", a[1]) if (a.length > 3) ;NOTE 有第4参数,则跳过 continue if (a.length > 2) { ;NOTE 核心判断 if isobject(a[3]) { oGui.AddComboBox(funOpt(a[2]), a[3]) } else { if (a[2] ~= "^n[A-Z]") ;限制为数字 oGui.AddEdit(funOpt.call(a[2]) . " number", a[3]).OnEvent("change", editChange) else { if (a[2] ~= "^b[A-Z]") { ;boolean oGui.SetFont("cRed") if a[3] oGui.AddCheckbox(funOpt.call(a[2]) . " checked", "是") else oGui.AddCheckbox(funOpt.call(a[2]), "是") oGui.SetFont("cDefault") } else oGui.AddEdit(funOpt.call(a[2]), a[3]).OnEvent("change", editChange) } } if (a.length >= 4) focusCtl := a[2] } else oGui.AddEdit(funOpt.call(a[2])).OnEvent("change", editChange) } oBtn := oGui.AddButton("default center", "确定") oBtn.OnEvent("click", btnClick) if strlen(focusCtl) { oGui[focusCtl].focus() } objRes := map() ;空白值不返回 oGui.show() WinWaitClose("ahk_id " . oGui.hwnd) return objRes editChange(ctl, p*) { if (bOne) { for hwnd, ctlLoop in ctl.gui { if (ctlLoop.ClassNN ~= "^Edit\d+$" && hwnd != ctl.hwnd) ctlLoop.text := "" } } } btnClick(ctl, p*) { ctl.gui.submit for k, a in arr { try ;有些控件并未生成 oGui[a[2]] catch continue v := (a.length>2) ? oGui[a[2]].text : oGui[a[2]].value v := trim(v) ;TODO 是否trim if strlen(v) objRes[a[2]] := v } oGui.destroy() } doEscape(oGui, p*) { oGui.destroy() } }
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(2)
23行json的这里报错,缺库吧
我是用的天黑AHK_H版2.0.14,自带json和多线程等等等实用功能。我更新了一张配图,如果觉得是你想要的效果就下载个json或者下载H版解释器来替换吧
https://github.com/thqby/AutoHotkey_H/releases