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))
View Code
  • (通过 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?(选区的左端?)。
原文地址:https://www.cnblogs.com/RobertL/p/14213617.html