选择器:
supertextbox· 设计器组件: 超级文本框 · 按名称:supertextbox#名称或#名称
定位: 大文本 / 日志 / 类编辑器控件(始终多行、自绘)。普通表单输入请用「文本框 / 多行文本框」。
伪状态: :hover :focus :disabled
与多行文本框对照
| 超级文本框 | 多行文本框 | |
|---|---|---|
| 场景 | 日志、源码、大文件浏览与编辑 | 表单备注、短多行输入 |
| 大文件 | mmap / 虚拟窗口;可保存;可尝试物化后编辑 | 适合中等以内全文缓冲 |
| 行号 | 支持「显示行号」;宽度按位数自适应;可用「字体类」+「置行号字体」 | 无 |
| 富文本 | 选区样式 + HTML/Markdown 只读预览 | 无(纯文本编辑) |
可用属性(YSS / 设计器)
| 类别 | 属性 |
|---|---|
| 通用 | color、background-color、border-*、border-radius、show-border、transparent-background |
| 字体 | font-size、font-family、font-bold、font-italic |
| 对齐 | text-align:left / center / right |
| 焦点 | focus-border-color、focus-background-color、focus-glow-color |
| 编辑 | word-wrap(自动折行)、只读、最大长度、滚动条、行间距 |
| 外观 | 显示行号(设计器属性;运行时也可用 显示行号(真)) |
示例 YSS
supertextbox#日志框 {
color: #D4D4D4;
background-color: #1E1E1E;
border-color: #3C3C3C;
border-width: 1;
border-radius: 4;
font-size: 13;
word-wrap: true;
}
supertextbox#日志框:focus {
focus-border-color: #007ACC;
focus-glow-color: #007ACC;
}
代码侧常用 API
读写与文件
超级文本框1.文本 = "初始内容"
整数 ok = 超级文本框1.载入文件("log.txt")
ok = 超级文本框1.保存文件("out.txt") // 可选第二参:编码(0=沿用载入编码)
整数 cp = 超级文本框1.取文件编码()
// 打开文件:组合对话框 + 载入(筛选器/标题由你传入,控件不写死)
文本 路径 = 打开文件对话框("打开文本", "", "文本(*.txt;*.log)|*.txt;*.log|所有文件(*.*)|*.*")
如果 (路径 != "") {
超级文本框1.载入文件(路径)
}
// 拖入文件:自行用「拖放类」注册目标,在事件里 载入文件(路径)。控件不内置拖放。
查找 / 替换 / 选区
整数 p = 超级文本框1.查找("error")
p = 超级文本框1.查找("error", 0, 假, 真) // 全词匹配
p = 超级文本框1.查找("err\\w+", 0, 假, 假, 真) // 正则(ECMAScript)
p = 超级文本框1.查找下一个("error")
整数 命中 = 超级文本框1.取查找命中数("error")
p = 超级文本框1.替换("error", "ok")
整数 n = 超级文本框1.全部替换("\t", " ")
超级文本框1.置选区(0, 10)
超级文本框1.滚到选区()
整数 起 = 超级文本框1.取选区起()
整数 止 = 超级文本框1.取选区止()
命中靠选区高亮;查找面板/快捷键请自己做,调用上述方法即可。
书签 / 重新载入 / 跟随末尾
整数 bi = 超级文本框1.加入书签() // 当前行;或 加入书签(100)
超级文本框1.跳到书签(bi)
超级文本框1.置跟随末尾(真)
整数 ok = 超级文本框1.重新载入() // 按上次载入路径刷新;文件监视见 docs/filewatch-support.md
换行风格 / 浏览模式
整数 s = 超级文本框1.取换行风格() // 0=LF,1=CRLF;载入后尽量跟随文件
超级文本框1.置换行风格(1) // 保存时按 CRLF 写出
超级文本框1.置浏览模式(真) // 只看不改(含虚拟补丁);不内置拖放
逻辑 浏 = 超级文本框1.取浏览模式()
片段读取(不限定「日志」场景)
文本 一片 = 超级文本框1.取文本范围(0, 80) // 字符半开区间;虚拟模式=当前窗口
文本 多行 = 超级文本框1.取行文本范围(1, 20) // 行号闭区间,从 1 起
如果 (超级文本框1.是否虚拟模式()) {
文本 头 = 超级文本框1.取文件字节范围(0, 4096) // 相对数据区字节;单次最多约 8MB
}
剪贴板与行列
超级文本框1.置选区(0, 5)
超级文本框1.复制() // 多行无选区返回 0;Ctrl+C 同
超级文本框1.剪切() // Ctrl+X
超级文本框1.粘贴() // Ctrl+V
超级文本框1.删除选区()
整数 行 = 超级文本框1.取当前行() // 从 1 起
整数 列 = 超级文本框1.取当前列()
文本 一行 = 超级文本框1.取行文本(行)
快捷键(焦点在控件内):Ctrl+A 全选、Ctrl+C/X/V 复制/剪切/粘贴、Ctrl+Z/Y 撤销/重做。
撤销 / 重做
如果 (超级文本框1.可撤销()) {
超级文本框1.撤销()
}
如果 (超级文本框1.可重做()) {
超级文本框1.重做()
}
虚拟模式:当前窗口缓冲内可撤销/重做(标记脏,滚动或保存时刷盘);换窗后撤销栈清空。
大文件虚拟模式
约 ≥4MB(或超过「最大长度」)载入后进入虚拟窗口:不全量进内存,可滚动 / 全文件查找 / 跳行 / 保存 / 编辑。
能力目标:流畅处理约 400MB 级文本(x64);映射上限约 4GB(行偏移为 32 位)。4MB 只是切入虚拟模式的阈值,不是最大体积。
- 可编辑(延迟刷盘):键入 / 删除 / 粘贴先改当前窗口缓冲,滚动换窗、查找、替换、保存时再一次性写回源文件,避免对 400MB 文件「每字拷一遍」。
替换仍按次写回;全部替换(UTF-8/UTF-16)单次流式写回整文件。- 仍可
开始编辑()尝试全文物化(受「最大长度」约束,约 2 亿字符 / ~400MB UTF-16);失败则继续虚拟补丁编辑。 是否虚拟模式()/取文件字节数()查询状态。查找下一个从上次命中字节之后继续。文本属性在虚拟模式下仅反映当前窗口切片;取行数/跳到行/查找按全文件。
如果 (超级文本框1.是否虚拟模式()) {
整数 bytes = 超级文本框1.取文件字节数()
如果 (超级文本框1.开始编辑() == 0) {
// 仍为虚拟模式:键入/替换即可,超大文件建议直接编辑无需物化
超级文本框1.替换("error", "ok")
}
}
行号与富文本
超级文本框1.显示行号(真)
超级文本框1.置自动折行(假) // 软换行关:长行可横向滚;大文件/虚拟模式始终硬换行排版
逻辑 wrap = 超级文本框1.取自动折行()
// 行号栏宽度按总行数位数自适应;可用字体类单独设行号外观
字体类 ln
ln.置名称("Consolas")
ln.置字号(12)
ln.置文本色("#B0B0B0")
ln.置背景色("#282828")
超级文本框1.置行号字体(ln)
字体类 body
body.置名称("Consolas")
body.置字号(13)
超级文本框1.置内容字体(body) // 或 超级文本框1.置字体(body) / body.应用到("超级文本框1")
// 可组合关键字着色(日志高亮):关键字/颜色由你传入,不内置 error/warn
超级文本框1.加入关键字色("error", "#FF5555")
超级文本框1.加入关键字色("warn", "#DCDCAA", "#3A3A00")
超级文本框1.清除关键字色() // 或 清除关键字色("error")
超级文本框1.置显示空白(真) // 空格· 制表→ 换行拐角;可关
超级文本框1.置选区(0, 5)
超级文本框1.置选区样式(真, 假, 假, "#FF5555") // 整体替换该段样式,并记住后续键入样式
超级文本框1.置选区加粗(真) // 只改粗体,保留颜色等
超级文本框1.置选区前景色("#55FF55")
超级文本框1.置选区背景色("#3A3A00") // 编辑态底色高亮
文本 html = 超级文本框1.取富文本()
超级文本框1.置富文本("<b>标题</b><br/>正文")
超级文本框1.置预览格式(1) // 0纯文本编辑 1HTML预览 2Markdown预览(预览只读)
超级文本框1.置预览格式(0)
键入 / 粘贴 / 删除会维护多 run:新字继承光标左侧样式,或最近一次「置选区*」记住的样式。大缓冲(约 >64KB)时「内容改变/文本改变」事件载荷可能为空文本,避免每键拷贝全文——需要全文时请自行「取文本」。
事件
函数 超级文本框1.内容改变 (文本 新内容) {
输出 (新内容)
}
函数 超级文本框1.选区改变 () {
输出("选区 " + 到文本(超级文本框1.取选区起()) + "-" + 到文本(超级文本框1.取选区止()))
}
函数 超级文本框1.光标移动 () {
输出("行=" + 到文本(超级文本框1.取当前行()))
}
函数 超级文本框1.文件已载入 (文本 路径) {
输出("已载入 " + 路径)
}
函数 超级文本框1.虚拟模式改变 (整数 当前值) {
// 当前值:1=虚拟窗口,0=否
输出("虚拟=" + 到文本(当前值))
}
函数 超级文本框1.替换进度 (整数 当前值) {
// 全部替换进行中;当前值=已替换次数
输出("已替换 " + 到文本(当前值))
}
说明
- 虚拟模式保存:编码与载入一致时可按原文件字节写出;指定其它编码时会先解码再按新编码写入。
- 自动折行:设计器 / YSS
word-wrap/置自动折行同一开关。大文件与虚拟窗口按硬换行排版(可横向滚),不在此路径做软折行。 - 富文本约定为简易 HTML(
span样式 +<br/>);编辑态键入会继承样式并绘制背景色。完整 Word 式排版(多段落/列表等)仍可继续增强。 - 内存上限由属性「最大长度」与运行时默认上限共同约束;超限物化会失败,但仍可在虚拟模式下编辑(延迟刷盘)。
- 极端密换行(超过约 3200 万行)会拒绝建立行索引;请先用外部工具拆分文件。