工具

增强对话框

由 NPC-fafaLV1审核员 发布

暂无评分

一个不依赖 SDK 内置对话框的、可复用的自建对话框控件库。

作品介绍

加强对话框(custom.dialog)· by NPC-fafa

基于 Tao Mod Engine 2.0(api.ui.show + api.input)的自建对话框库:
不依赖引擎自带的 DialogShow(那个只有标题/正文/按钮,连 rect 都没有),
自己把「可拖动可缩放的窗口 + 真实输入框 + 一整套控件 + 自造图标」做齐,纯 Lua(native = false)。

需要宿主带 tao.ui_controls 扩展(api.ui.show 可用);不可用时日志会明确提示。

比引擎多了什么

能力引擎现状我们做了什么
窗口移动 / 缩放TaoWindow、UiWindow、服务 ui/uicontrols、ABI 四处契约都没有 Move/Resize自造拖动层:按住标题拖、拖右下角改尺寸;幽灵框预览、松手重建,内容(文字/勾选/焦点)全部保留
窗口管理没有这个概念双击标题复位、边缘钳制、贴边/居中吸附、落点记忆(本次运行内)
键盘操作窗口只有输入快照,没有窗口级语义小键盘 8/2/4/6 搬窗、Esc 关顶层
滑杆 / 进度条节点类型里没有 range/slider自造滑杆(可设档位、滑块与填充条实时跟手)、只读进度条
滚动列表scroll 的滚动条不可拖动自造可拖动滚动条(跟手)+ 只渲染可见行,绕开"每文档 128 节点"上限
复选框没有 checkbox 控件自造复选框(勾/未勾两张图切显隐,点一下立刻变)
图标 / 缺字形UI 字体缺 [ ] { } < > ✔ × → 显示 <Missing25→16 张自造 PNG(×、✔、勾选框、箭头、滑条零件),resources.xml 注册后用 image 节点显示
可复用 API只有裸节点树D.show{...} + 快照回调 + 状态保留重建 + 建失败回滚 + 布局容错

用起来

  1. 目录放进 mods/,进游戏。

  2. 入口只有主菜单 (210,10) 的「打开对话框」按钮。

  3. 对话框内:

    操作效果
    拖标题区 / 拖右下角移动 / 改尺寸(靠边自动吸附)
    双击标题区回到初始位置
    拖滑杆、拖列表右侧滚动条数值与列表实时跟手
    点复选框立刻切换
    小键盘 8/2/4/6搬窗(输入框有焦点时先让给打字,按 Tab 即可)
    Esc关闭顶层对话框

在别的 mod 里复用

-- 顺序有讲究:drag → skin → controls → dialog
local drag = assert(api.include("drag.lua") or MOD_DRAG)
drag.install()                                  -- 不传 key 就不占任何键

assert(api.include("skin.lua"))                 -- 自造美术(需要 resources.xml + images/ 一起搬)
local controls = assert(api.include("controls.lua") or MOD_CONTROLS)
controls.install()

local D = assert(api.include("dialog.lua") or MOD_DIALOG)
local h = D.show{
  title = "设置",
  title_icon = "icon_check",                    -- 自造图标
  fields  = { { key = "name", label = "名称:", text = "" } },
  controls = {
    { kind = "slider",  key = "vol", label = "音量", min = 0, max = 100, step = 5, value = 60,
      instant = true, instant_steps = 21 },     -- instant = 跟手
    { kind = "progress", key = "load", label = "进度", min = 0, max = 100, value = 35 },
    { kind = "checkbox", key = "sun", label = "无限阳光", checked = true },
  },
  items = { { label = "条目一", selected = true }, { label = "条目二" } },
  on_ok = function(snap)
    api.log(snap.texts["name"] .. "/" .. tostring(snap.values["vol"]))
  end,
}
-- D.snapshot/get_text/set_text/get_control/set_control/resize/move_by/set_first/active/close_top/close_all

D.show 的常用选项:title、title_icon、fields、controls、items、x/y/w/h、
modal(默认 true)、draggable / resizable / snap(默认 true)、
max_rows(默认 10)、scrollbar(默认 true;关掉则退回「上一页/下一页」分页)、on_ok / on_close。

文件

main.lua        入口(装配 + 主菜单按钮 + 停用清理)
drag.lua        自造窗口拖动/缩放层
keys.lua        自造键盘窗口操控层
controls.lua    自造控件族(滑杆/进度条/滚动条/复选框)
skin.lua        自造美术层(图标 + 控件贴图 id 表)
dialog.lua      可复用对话框库(排版/滚动/吸附/重建/容错)
demo.lua        示例窗口(460 宽小窗)
resources.xml   自造 PNG 清单

版本记录

共 3 个公开版本

玩家评分

暂无评分

作品星级 = 所有有效评分的平均值,显示到小数点后一位。每个账号只计一票,可修改或撤回;作者不能给自己的作品评分。评分不随版本更新清空,停用账号的评分不计入。

登录后评分

玩家评论 0

登录 后即可参与评论,不需要开发者资格。

还没有评论,来聊聊这个 Mod 吧。