//trackbar 滑尺控件 import win.ui.ctrl.metaProperty;//导入控件属性元表支持 namespace win.ui.ctrl; class trackbar{ ctor(parent,tParam){ if(tParam){ tParam.cls = "msctls_trackbar32"; if(tParam.edge) tParam.exstyle |= 0x20000/*_WS_EX_STATICEDGE*/; if(tParam.tip || ( tParam.tip === null) ) tParam.style |= 0x100/*_TBS_TOOLTIPS*/; if(tParam.vert) tParam.style |= 0x2/*_TBS_VERT*/; if(tParam.msel) tParam.style |= 0x20/*_TBS_ENABLESELRANGE*/; if(tParam.transparent){ tParam.style |= 0x1000/*_TBS_TRANSPARENTBKGND*/;//不支持 XP 系统 } var tick = TICKSTYLE[tParam.tick]; tParam.style |= tick===null?0x4/*_TBS_TOP*/:tick; if( !tParam.manual ){ tParam.style |= 0x1/*_TBS_AUTOTICKS*/; }; if( tParam.ntk ){ tParam.style |= 0x10/*_TBS_NOTICKS*/ }; this.$curToolInfo = { INT cbSize = 44; INT flags; ADDR hOwner; ADDR id; struct rect = ::RECT(); pointer hinst; ustring text; int lParam; hTooltip = 0; @_meta; } } } onCreate = function(){ this.setFrequency(5) } @_metaProperty; } namespace trackbar{ TICKSTYLE = { none = 0x10/*_TBS_NOTICKS*/; top = 0x4/*_TBS_TOP*/; bottom = 0x0/*_TBS_BOTTOM*/; left = 0x4/*_TBS_LEFT*/; right = 0x0/*_TBS_RIGHT*/; both = 0x8/*_TBS_BOTH*/ } _metaProperty = ..win.ui.ctrl.metaProperty( setTick = function(tk){ ::SendMessageInt(owner.hwnd,0x404/*_TBM_SETTIC*/,0,tk) } setFrequency = function(interval=2){ ::SendMessageInt(owner.hwnd,0x414/*_TBM_SETTICFREQ*/,interval,0) } setRange = function(min,max){ owner.min2 = min; owner.max2 = max; ::SendMessageInt(owner.hwnd, 0x406/*_TBM_SETRANGE*/ ,1 // redraw flag ,::MAKELONG(min,max) ) } setSel = function(min,max){ ::SendMessageInt(owner.hwnd, 0x40A/*_TBM_SETSEL*/ ,0 // redraw flag ,::MAKELONG(min,max) ) } max = { _get = function(){ return ::SendMessage(owner.hwnd, 0x402/*_TBM_GETRANGEMAX*/); } _set = function( v ){ ::SendMessageInt(owner.hwnd, 0x408/*_TBM_SETRANGEMAX*/ ,1 // redraw flag ,v ) } }; min = { _get = function(){ return ::SendMessage(owner.hwnd,0x401/*_TBM_GETRANGEMIN*/); } _set = function( v ){ ::SendMessageInt(owner.hwnd, 0x407/*_TBM_SETRANGEMIN*/ ,1 // redraw flag ,v ) } }; pos = { _get = function(){ return ::SendMessage(owner.hwnd, 0x400/*_TBM_GETPOS*/ ) } _set = function( v ){ ::SendMessageInt(owner.hwnd, 0x405/*_TBM_SETPOS*/, 1,v:0) } }; tooltip = { _set = function( v ){ var ti = owner.$curToolInfo; var hwnd = owner.sendMessage(0x41E/*_TBM_GETTOOLTIPS*/,0,0); if(!hwnd) return hwnd; if( ::User32.SendMessage(hwnd,0x43B/*_TTM_GETCURRENTTOOLW*/,0,ti) ){ ti.text = type(v)!="pointer" ? tostring(v) : v; ::SendMessageByStruct(hwnd,0x439/*_TTM_UPDATETIPTEXTW*/, 0,ti); } } }; getNotifyCustomDraw = function(code,ptr){ if(type(ptr)!="pointer") error("请指定有效NM_CUSTOMDRAW指针",2) if( code == 0xFFFFFFF4/*_NM_CUSTOMDRAW*/ ){ var lvcd = ..raw.convert(ptr,{ struct hdr = { addr hwndFrom; ADDR idFrom; INT code; } int dwDrawStage; pointer hdc; struct rc = ::RECT();//Handling subitem pre-paint messages on Windows XP receives incorrect top and bottom values addr dwItemSpec; int uItemState; pointer lItemlParam; } ); lvcd.update = function(){ ..raw.mixin(ptr,lvcd); } return lvcd; } }; ) } with trackbar._metaProperty{ value = pos; } /***intellisense() win.ui.ctrl.trackbar() = 跟踪条控件\nXP 系统不支持透明背景,之后的系统都支持\n!trackbar. ?win.ui.ctrl.trackbar = !trackbar. !trackbar.tooltip = 提示文本,只写属性,\n值如果不是指针会自动调用 tostring 函数转为字符串,\n可用于在 oncommand 事件中修改提示文本 !trackbar.cls = 设计时类名 !trackbar.className = 运行时类名 !trackbar.pos = 滑块当前刻度,注意不能大于 0xFFFF,不要使用负数 !trackbar.value = 滑块当前刻度,注意不能大于 0xFFFF,不要使用负数 !trackbar.hwnd = 控件句柄 !trackbar.id = 控件ID !trackbar._parentForm = 返回创建控件的容器窗口(win.form对象),所有窗口控件都拥有此只读属性。\n对于使用窗体设计器创建的窗口,也就是返回设计时窗体容器。\n\n即使子窗口移除子窗口样式、更改父子关系,或以 orphanWindow显示,\n控件的 _parentForm 始终都不会改变\n!winform. !trackbar.getParent() = 返回父窗口\n!static. !trackbar.setParent(__/*控件对象*/) = 改变父窗口 !trackbar.hide = 控件是否隐藏 !trackbar.disabled = 是否禁用 !trackbar.left = 左侧坐标 !trackbar.right = 右侧坐标 !trackbar.top = 顶部坐标 !trackbar.bottom = 底部坐标 !trackbar.width = 宽度 !trackbar.height = 高度 !trackbar.redraw() = 刷新 !trackbar.show(true__) = 显示控件 !trackbar.getRect() = 控件区块位置(::RECT结构体) !trackbar.getRect(true) = 控件屏幕区块位置(::RECT结构体) !trackbar.setRect(rc) = 设置控件区块位置(::RECT结构体) !trackbar.setRect(rc,true) = 设置控件屏幕区块位置(::RECT结构体) !trackbar.getClientRect() = 控件客户区块位置(::RECT结构体)\n!rect. !trackbar.getFont() = 控件字体(::LOGFONT结构体)\n!logfont. !trackbar.setFont(__/*指定字体*/) = 指定LOGFONT字体对象,或逻辑字体句柄 !trackbar.setFont(混入字体属性) = @.setFont(point=10;name="宋体"); !trackbar.theme = 外观主题,例如\nwinform.button.theme = "Explorer"\nwinform.button.theme = false !trackbar.max = 最大值,注意不能大于0xFFFF,不要使用负数 !trackbar.min = 最小值,注意不能大于0xFFFF,不要使用负数 !trackbar.setTick(__/*刻度*/) = 显示设置刻度标记位置 !trackbar.setFrequency(2) = 刻度标记间隔\n必须在样式中指定自动刻度标记 !trackbar.setRange(.(最小刻度,最大刻度) = 设置最大最小刻度,注意不能大于0xFFFF,不要使用负数 !trackbar.setSel(.(起始刻度,结束刻度) = 设置选区 !trackbar.modifyStyle(.(remove,add,swpFlags) = 修改窗口样式,所有参数都是可选参数,\n@remove 用数值指定要移除的样式,可使用 _WS_ 前缀的常量\n@add 用数值指定要添加的样式,可使用 _WS_ 前缀的常量\n@swpFlags 可选用数值指定调整窗口选项,可使用 _SWP_ 前缀的常量\n如果指定了 @swpFlag ,则使用该参数调用::SetWindowPos\n细节请参考 win.modifyStyle 函数源码 !trackbar.modifyStyleEx(.(remove,add,swpFlags) = 修改窗口扩展样式,所有参数都是可选参数,\n@remove 用数值指定要移除的样式,可使用 _WS_EX_ 前缀的常量\n@add 用数值指定要添加的样式,可使用 _WS_EX_ 前缀的常量\n@swpFlags 可选用数值指定调整窗口选项,可使用 _SWP_ 前缀的常量\n如果指定了 @swpFlag ,则使用该参数调用::SetWindowPos\n细节请参考 win.modifyStyle 函数源码 !trackbar.capture = 是否捕获全局鼠标消息 !trackbar.close() = 关闭控件窗 !trackbar.invalidate(__/*可选使用::RECT()对象指定客户区*/) = 使窗口绘图区无效 !trackbar.invalidate(__/*可选使用::RECT()对象指定客户区*/,0) = 使窗口绘图区无效\n不刷新背景 !trackbar.update() = 重绘invalidate函数指定的区块 !trackbar.setFocus() = 设置焦点 !trackbar.setPos(.(x坐标,y坐标,宽,高,插入位置,参数) = 调整窗口位置或排序,所有参数可选\n同时指定x,y坐标则移动位置\n同时指定宽高则改变大小\n指定插入位置(句柄或_HWND前缀常量)则调整Z序 !trackbar.getPos() = 返回相对坐标,宽,高\nx,y,cx,cy=win.getPos(hwnd) !trackbar.threadCallable() = 开启此控件的跨线程调用功能 !trackbar.sendMessage(.(msg,wParam,lParam) = 发送窗口消息\n此函数用法请参考 ::User32.SendMessage !trackbar.postMessage(.(msg,wParam,lParam) = 投递窗口消息到消息队列中\n此函数用法请参考 ::User32.PostMessage !trackbar.getNotifyCustomDraw(code,ptr) = NM_CUSTOMDRAW通知消息返回NMLVCUSTOMDRAW结构体 !trackbar.getNotifyCustomDraw() = !NMCUSTOMDRAW. !NMCUSTOMDRAW.update() = 更新数据 !NMCUSTOMDRAW.dwDrawStage = 绘图状态 !NMCUSTOMDRAW.hdr = !nmhdr. !NMCUSTOMDRAW.hdc = 设置句柄 !NMCUSTOMDRAW.rc = !rect. !NMCUSTOMDRAW.dwItemSpec = 行序号 !NMCUSTOMDRAW.uItemState = 状态值,例如 _CDIS_FOCUS !NMCUSTOMDRAW.lItemlParam = 自定义数据,LPARAM 参数 end intellisense***/ /**intellisense() _TBS_AUTOTICKS=@0x1/*_TBS_AUTOTICKS*/ _TBS_VERT=@0x2/*_TBS_VERT*/ _TBS_HORZ=@0x0/*_TBS_HORZ*/ _TBS_TOP=@0x4/*_TBS_TOP*/ _TBS_BOTTOM=@0x0/*_TBS_BOTTOM*/ _TBS_LEFT=@0x4/*_TBS_LEFT*/ _TBS_RIGHT=@0x0/*_TBS_RIGHT*/ _TBS_BOTH=@0x8/*_TBS_BOTH*/ _TBS_NOTICKS=@0x10/*_TBS_NOTICKS*/ _TBS_ENABLESELRANGE=@0x20/*_TBS_ENABLESELRANGE*/ _TBS_FIXEDLENGTH=@0x40/*_TBS_FIXEDLENGTH*/ _TBS_NOTHUMB=@0x80/*_TBS_NOTHUMB*/ _TBS_TOOLTIPS=@0x100/*_TBS_TOOLTIPS*/ _TBS_REVERSED=@0x200/*_TBS_REVERSED*/ _TBS_DOWNISLEFT=@0x400/*_TBS_DOWNISLEFT*/ _TBS_NOTIFYBEFOREMOVE=@0x800/*_TBS_NOTIFYBEFOREMOVE*/ _TBS_TRANSPARENTBKGND=@0x1000/*_TBS_TRANSPARENTBKGND*/ _TBM_GETPOS=@0x400/*_TBM_GETPOS*/ _TBM_GETRANGEMIN=@0x401/*_TBM_GETRANGEMIN*/ _TBM_GETRANGEMAX=@0x402/*_TBM_GETRANGEMAX*/ _TBM_GETTIC=@0x403/*_TBM_GETTIC*/ _TBM_SETTIC=@0x404/*_TBM_SETTIC*/ _TBM_SETPOS=@0x405/*_TBM_SETPOS*/ _TBM_SETRANGE=@0x406/*_TBM_SETRANGE*/ _TBM_SETRANGEMIN=@0x407/*_TBM_SETRANGEMIN*/ _TBM_SETRANGEMAX=@0x408/*_TBM_SETRANGEMAX*/ _TBM_CLEARTICS=@0x409/*_TBM_CLEARTICS*/ _TBM_SETSEL=@0x40A/*_TBM_SETSEL*/ _TBM_SETSELSTART=@0x40B/*_TBM_SETSELSTART*/ _TBM_SETSELEND=@0x40C/*_TBM_SETSELEND*/ _TBM_GETPTICS=@0x40E/*_TBM_GETPTICS*/ _TBM_GETTICPOS=@0x40F/*_TBM_GETTICPOS*/ _TBM_GETNUMTICS=@0x410/*_TBM_GETNUMTICS*/ _TBM_GETSELSTART=@0x411/*_TBM_GETSELSTART*/ _TBM_GETSELEND=@0x412/*_TBM_GETSELEND*/ _TBM_CLEARSEL=@0x413/*_TBM_CLEARSEL*/ _TBM_SETTICFREQ=@0x414/*_TBM_SETTICFREQ*/ _TBM_SETPAGESIZE=@0x415/*_TBM_SETPAGESIZE*/ _TBM_GETPAGESIZE=@0x416/*_TBM_GETPAGESIZE*/ _TBM_SETLINESIZE=@0x417/*_TBM_SETLINESIZE*/ _TBM_GETLINESIZE=@0x418/*_TBM_GETLINESIZE*/ _TBM_GETTHUMBRECT=@0x419/*_TBM_GETTHUMBRECT*/ _TBM_GETCHANNELRECT=@0x41A/*_TBM_GETCHANNELRECT*/ _TBM_SETTHUMBLENGTH=@0x41B/*_TBM_SETTHUMBLENGTH*/ _TBM_GETTHUMBLENGTH=@0x41C/*_TBM_GETTHUMBLENGTH*/ _TBM_SETTOOLTIPS=@0x41D/*_TBM_SETTOOLTIPS*/ _TBM_GETTOOLTIPS=@0x41E/*_TBM_GETTOOLTIPS*/ _TBM_SETTIPSIDE=@0x41F/*_TBM_SETTIPSIDE*/ _TBM_SETBUDDY=@0x420/*_TBM_SETBUDDY*/ _TBM_GETBUDDY=@0x421/*_TBM_GETBUDDY*/ _TBM_SETPOSNOTIFY=@0x422/*_TBM_SETPOSNOTIFY*/ _CCM_SETUNICODEFORMAT=@0x2005/*_CCM_SETUNICODEFORMAT*/ _CCM_GETUNICODEFORMAT=@0x2006/*_CCM_GETUNICODEFORMAT*/ _TBM_SETUNICODEFORMAT=@0x2005/*_TBM_SETUNICODEFORMAT*/ _TBM_GETUNICODEFORMAT=@0x2006/*_TBM_GETUNICODEFORMAT*/ _TB_LINEUP=@0x0/*_TB_LINEUP*/ _TB_LINEDOWN=@0x1/*_TB_LINEDOWN*/ _TB_PAGEUP=@0x2/*_TB_PAGEUP*/ _TB_PAGEDOWN=@0x3/*_TB_PAGEDOWN*/ _TB_THUMBPOSITION=@0x4/*_TB_THUMBPOSITION*/ _TB_THUMBTRACK=@0x5/*_TB_THUMBTRACK*/ _TB_TOP=@0x6/*_TB_TOP*/ _TB_BOTTOM=@0x7/*_TB_BOTTOM*/ _TB_ENDTRACK=@0x8/*_TB_ENDTRACK*/ end intellisense**/