Iup Lua wheel button scroll caret
- IupLua中,当鼠标在text控件客户区中, SetGlobal('MOUSEBUTTON',..) (模拟滚轮操作(wheel))会触发一次 LEAVEWINDOW_CB - ENTERWINDOW_CB 回调(callback)。
iup.SetGlobal('INPUTCALLBACKS','YES')
iup.SetGlobalCallback('GLOBALWHEEL_CB',callback)
- 可以用 SetGlobal('MOUSEBUTTON','X x Y W -1') 构造无副作用的用户触发,过程位于以上手动的 GLOBALWHEEL_CB 之后。(因为 GLOBALWHEEL_CB 过程发生于滚动前)
-
Iup手册记录缺失。 IupSetFunction / IupSetCallback 没有相应的Lua表达(没有 Iup.SetFunction ,无需 Iup.SetCallback ),且在 IupSetFunction / IupSetCallback 中未提及 iup.SetGlobalCallback (Global Attributes提及)
- 已反馈-已回复,不作补充,其他位置有
- Bug。Global Attributes中的 MOUSEBUTTON 对滚轮负滚动(滑向自己)(delta==-1)无响应。(但仍会触发如上的 LEAVEWINDOW_CB , ENTERWINDOW_CB )
- 已反馈-已回复 已修复。
- 按下Shift/Ctrl时,滚动滚轮不会卷动,会触发GLOBALWHEEL_CB。
- 模拟按下Shift/Ctrl以阻止滚动。
- CARET_CB 会在按下Shift/Ctrl+设置CARETPOS时意外地响应。(照说只相应来自用户的交互操作)
- iup.text.SCROLLTO[POS] 给定的坐标[字符]位置将显示到客户区的左上角。
- 客户区左上角的字符位置为 iup.ConvertXYToPos(iup.text,0,0) 。需要向内偏移一定距离(边框、滚动条)才能获取到文本位置。
- bug,luaiup对象存储的用户值布尔无法覆盖字符串。
- 已反馈-已回复 不作为bug,机制如此。boolean类型存储于Lua,字符串、数值、函数、表存储于C,可重叠、不覆盖,获取时C优先于于Lua(字段在C中时会先读取)。

local iup=require'iuplua' local d=iup.dialog{userField=1} assert('1'==d.userField and 'string'==type(d.userField)) d.userField=false assert('1'==d.userField and 'string'==type(d.userField)) d.userField=nil d.userField=false assert(false==d.userField and 'boolean'==type(d.userField))
- (通过 SELECTIONPOS )改变文本选择范围时,光标总在末端/右侧(即便初始状态光标在范围的左端,选择范围向左扩大)。
- 刚改变完 SELECTIONPOS后,不能立即读取,立即读取得到的值为nil。
- 异常(已反馈),iup.text文本框中,当可见行只有1行时,向下一次滚动3行,向上一次滚动0行;当可见行只有2行时,向下一次滚动3行,向上一次滚动1行;当可见行为3行时,向下一次滚动3行,向上一次滚动2行;当可见行为3+行时,向下一次滚动3行,向上一次滚动3行。
- 设置 SELECTION[POS] 时,POS1,POS2对应锚点(Anchor)、光标(Caret),与POS1、POS2谁大谁小无关。获取时,POS1对应选段的左侧位置,POS2对应右侧,与锚点、光标无关。
- 设置 SELECTION[POS] ,光标总被放置在右侧。如,选择一段文本,将光标放置在左侧,即便 text.SELECTIONPOS=text.SELECTIONPOS ,光标被移动到右侧。
- 获取失去焦点的TEXT的光标位置在选择范围(选段)的左侧。
- 按住修饰键Shift/Ctrl时,(通过 SELECTION[POS] )改变光标不会触发回调(Callback),移动鼠标(而非释放修饰键)时触发。
- 使用 text.CHARSIZE 获取单字节字符(半角)的平均大小(宽*高)。(推荐用等宽字符)
- 调试时不可依赖光标、鼠标位置。如,失去焦点时,CARETPOS为0?(选区的左端?)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?