Are you an LLM? You can read better optimized documentation at /zh/api/scripts/extension-modules/core/ui/scrollbar.md for this page in Markdown format
core.ui.scrollbar 
此模块提供用于终端 UI 系统的滚动条组件。
提示
使用此模块需要先导入:import("core.ui.scrollbar")
注意
UI 模块主要用于 xmake 内部的 xmake f --menu 菜单可视化配置。它提供基础的 UI 组件,当然,用户也可以用来实现一些自己的终端 UI。
scrollbar 模块继承自 view,提供水平和垂直滚动条功能。
scrollbar:new 
- 创建新的滚动条实例
函数原型 
API
lua
scrollbar:new(name: <string>, bounds: <rect>, vertical?: <boolean>)参数说明 
| 参数 | 描述 | 
|---|---|
| name | 必需。滚动条名称字符串 | 
| bounds | 必需。滚动条边界矩形 | 
| vertical | 可选。是否为垂直滚动条,默认为 true | 
返回值说明 
| 类型 | 描述 | 
|---|---|
| scrollbar | 返回滚动条实例 | 
用法说明 
创建垂直和水平滚动条:
lua
import("core.ui.scrollbar")
import("core.ui.rect")
local vscrollbar = scrollbar:new("vbar", rect{50, 1, 1, 20}, true)  -- 垂直滚动条
local hscrollbar = scrollbar:new("hbar", rect{1, 20, 50, 1}, false) -- 水平滚动条scrollbar:progress 
- 获取当前滚动进度
函数原型 
API
lua
scrollbar:progress()参数说明 
无参数
返回值说明 
| 类型 | 描述 | 
|---|---|
| number | 返回进度值,范围为 0.0 到 1.0 | 
用法说明 
获取当前滚动进度:
lua
local progress = scrollbar:progress()
print("滚动进度:", progress)scrollbar:progress_set 
- 设置滚动进度
函数原型 
API
lua
scrollbar:progress_set(progress: <number>)参数说明 
| 参数 | 描述 | 
|---|---|
| progress | 必需。进度值,范围为 0.0 到 1.0 | 
返回值说明 
| 类型 | 描述 | 
|---|---|
| scrollbar | 返回滚动条实例(用于链式调用) | 
用法说明 
设置滚动进度:
lua
scrollbar:progress_set(0.5)  -- 设置到中间位置
scrollbar:progress_set(0)    -- 设置到顶部
scrollbar:progress_set(1)    -- 设置到底部scrollbar:stepwidth 
- 获取步进宽度
函数原型 
API
lua
scrollbar:stepwidth()参数说明 
无参数
返回值说明 
| 类型 | 描述 | 
|---|---|
| number | 返回步进宽度,范围为 0.0 到 1.0 | 
用法说明 
获取步进宽度:
lua
local stepwidth = scrollbar:stepwidth()scrollbar:stepwidth_set 
- 设置步进宽度
函数原型 
API
lua
scrollbar:stepwidth_set(stepwidth: <number>)参数说明 
| 参数 | 描述 | 
|---|---|
| stepwidth | 必需。步进宽度,范围为 0.0 到 1.0 | 
返回值说明 
| 类型 | 描述 | 
|---|---|
| scrollbar | 返回滚动条实例(用于链式调用) | 
用法说明 
设置步进宽度:
lua
scrollbar:stepwidth_set(0.1)  -- 每次滚动 10%scrollbar:vertical 
- 检查是否为垂直滚动条
函数原型 
API
lua
scrollbar:vertical()参数说明 
无参数
返回值说明 
| 类型 | 描述 | 
|---|---|
| boolean | 如果是垂直滚动条返回 true,否则返回false | 
用法说明 
检查滚动条方向:
lua
if scrollbar:vertical() then
    print("这是垂直滚动条")
else
    print("这是水平滚动条")
endscrollbar:vertical_set 
- 设置滚动条方向
函数原型 
API
lua
scrollbar:vertical_set(vertical: <boolean>)参数说明 
| 参数 | 描述 | 
|---|---|
| vertical | 必需。设置方向, true为垂直,false为水平 | 
返回值说明 
| 类型 | 描述 | 
|---|---|
| scrollbar | 返回滚动条实例(用于链式调用) | 
用法说明 
设置滚动条方向:
lua
scrollbar:vertical_set(true)   -- 设置为垂直
scrollbar:vertical_set(false)  -- 设置为水平scrollbar:char 
- 获取滚动条字符
函数原型 
API
lua
scrollbar:char()参数说明 
无参数
返回值说明 
| 类型 | 描述 | 
|---|---|
| string | 返回滚动条显示的字符 | 
用法说明 
获取滚动条字符:
lua
local char = scrollbar:char()scrollbar:char_set 
- 设置滚动条字符
函数原型 
API
lua
scrollbar:char_set(char: <string>)参数说明 
| 参数 | 描述 | 
|---|---|
| char | 必需。滚动条显示的字符 | 
返回值说明 
| 类型 | 描述 | 
|---|---|
| scrollbar | 返回滚动条实例(用于链式调用) | 
用法说明 
设置滚动条字符:
lua
scrollbar:char_set('#')      -- 使用 # 字符
scrollbar:char_set('\u2588') -- 使用方块字符scrollbar:charattr 
- 获取滚动条字符属性
函数原型 
API
lua
scrollbar:charattr()参数说明 
无参数
返回值说明 
| 类型 | 描述 | 
|---|---|
| string | 返回字符属性字符串 | 
用法说明 
获取字符属性:
lua
local attr = scrollbar:charattr()scrollbar:charattr_set 
- 设置滚动条字符属性
函数原型 
API
lua
scrollbar:charattr_set(attr: <string>)参数说明 
| 参数 | 描述 | 
|---|---|
| attr | 必需。字符属性字符串 | 
返回值说明 
| 类型 | 描述 | 
|---|---|
| scrollbar | 返回滚动条实例(用于链式调用) | 
用法说明 
设置字符属性:
lua
scrollbar:charattr_set("yellow onblue bold")  -- 黄色粗体,蓝色背景scrollbar:scroll 
- 滚动滚动条
函数原型 
API
lua
scrollbar:scroll(steps?: <number>)参数说明 
| 参数 | 描述 | 
|---|---|
| steps | 可选。步数,正数向下/向右,负数向上/向左,默认为 1 | 
返回值说明 
无返回值
用法说明 
滚动滚动条:
lua
scrollbar:scroll(1)   -- 向下/向右滚动一步
scrollbar:scroll(-1)  -- 向上/向左滚动一步
scrollbar:scroll(5)   -- 滚动 5 步scrollbar:on_event 
- 处理键盘事件
函数原型 
API
lua
scrollbar:on_event(e: <event>)参数说明 
| 参数 | 描述 | 
|---|---|
| e | 必需。事件对象 | 
返回值说明 
| 类型 | 描述 | 
|---|---|
| boolean | 如果事件已处理返回 true,否则返回false | 
用法说明 
滚动条自动处理以下键盘事件:
- 垂直滚动条:Up(向上)、Down(向下)
- 水平滚动条:Left(向左)、Right(向右)
以下是一个完整的滚动条使用示例:
lua
import("core.ui.scrollbar")
import("core.ui.rect")
import("core.ui.label")
import("core.ui.window")
import("core.ui.application")
local demo = application()
function demo:init()
    application.init(self, "demo")
    self:background_set("blue")
    
    -- 创建窗口
    local win = window:new("main", rect{1, 1, self:width() - 1, self:height() - 1}, "滚动条演示")
    
    -- 创建滚动条
    local scrollbar = scrollbar:new("scroll", rect{self:width() - 2, 1, 1, self:height() - 2}, true)
    scrollbar:char_set('#')
    scrollbar:charattr_set("yellow on blue")
    scrollbar:stepwidth_set(0.1)
    
    -- 创建标签显示当前进度
    local label = label:new("progress", rect{1, 1, 30, 1}, "进度: 0%")
    
    -- 设置滚动事件
    scrollbar:action_set(action.ac_on_scrolled, function (v, progress)
        local text = string.format("进度: %.1f%%", progress * 100)
        label:text_set(text)
    end)
    
    -- 将组件添加到窗口面板
    local panel = win:panel()
    panel:insert(label)
    panel:insert(scrollbar)
    
    self:insert(win)
    self._win = win
    self._scrollbar = scrollbar
end
function demo:on_resize()
    self._win:bounds_set(rect{1, 1, self:width() - 1, self:height() - 1})
    self._scrollbar:bounds_set(rect{self:width() - 2, 1, 1, self:height() - 2})
    application.on_resize(self)
end
function main(...)
    demo:run(...)
end