//控件调色器 import win.ui; import win.ui.ctrl.pick; /*DSG{{*/ var winform = win.form(text="aardio 控件调色器";right=505;bottom=436;bgcolor=16777215;border="none";exmode="none";max=false;min=false;mode="popup";topmost=1) winform.add( bk={cls="bk";left=-231;top=-1;right=508;bottom=27;align="left";bgcolor=14079702;color=16777215;dl=1;dr=1;dt=1;forecolor=8026746;linearGradient=0;z=8}; colorPick={cls="pick";text="custom";left=1;top=27;right=507;bottom=412;z=1}; lbControlInfo={cls="plus";left=0;top=1;right=333;bottom=26;bgcolor=16777215;border={color=-5987164};color=9727;dl=1;dt=1;z=9}; lbTip={cls="static";text="设计时使用 RGB 值";left=364;top=415;right=503;bottom=437;color=8421504;transparent=1;z=2}; radioBgColor={cls="radiobutton";text="背景色";left=7;top=414;right=76;bottom=432;bgcolor=16777215;checked=1;z=3}; radioBorderColor={cls="radiobutton";text="边框色";left=147;top=414;right=216;bottom=432;bgcolor=16777215;z=7}; radioForeColor={cls="radiobutton";text="前景色";left=77;top=414;right=146;bottom=432;bgcolor=16777215;z=4}; radioIconColor={cls="radiobutton";text="图标色";left=286;top=414;right=355;bottom=432;bgcolor=16777215;z=6}; radioTextColor={cls="radiobutton";text="文本色";left=216;top=414;right=285;bottom=432;bgcolor=16777215;z=5} ) /*}}*/ /* 注意在窗体设计器中,颜色值默认使用 RGB 格式数值,而 plus 边框色使用 ARGB 格式数值。 在此控件调色器中以 ARGB 值为 0 表示使用默认颜色值(窗体设计器会转换为 -1 )。 */ //用后台线程与IDE交互,保持颜色滑块快速拖动的流畅度 thread.invoke( function(){ import ide; import thread.command; import gdi; import win; var ctrlName,ctrlParam; var lastUpdateTick = 0; var cmd = thread.command(); cmd.onColorChange = function(ctrlName2,argb,paramName,tick){ if(ctrlName && ctrlName === ctrlName2 && ctrlParam && (tick>lastUpdateTick)){ tick = lastUpdateTick; if(paramName=="borderColor"){ if(ctrlParam.border){ ctrlParam.border.color = argb : null; } } else { if(ctrlParam.cls="static" && paramName === "bgcolor"){ ctrlParam.transparent = !(argb & 0xFF000000); } ctrlParam[paramName] = argb===0 ? -1 : gdi.rgbReverse(argb); } /* 请注意:通过窗体设计器只能统一修改RGB颜色值(忽略透明度), 例如plus控件等也需要在aardio代码中才能设置支持透明度的ARGB值 */ ide.setControlParam(ctrlName,ctrlParam); } } cmd.onQuit = function(){ win.quitMessage() } cmd.onIdeCtrlActivated = function(name,param){ ctrlParam = param; ctrlName = name; } win.loopMessage() } ) import thread.command; import win.debounce; winform.colorPick.onColorChange = function(argb){ if(! ( winform.ideCtrlName && winform.ideCtrlParam ) ) return; var paramName = "bgcolor"; if(winform.radioForeColor.checked){ paramName = "forecolor" } elseif(winform.radioTextColor.checked){ paramName = "color" } elseif(winform.radioIconColor.checked){ paramName = "iconColor" } elseif(winform.radioBorderColor.checked){ paramName = "borderColor" } if(paramName === "bgcolor" && winform.ideCtrlParam && winform.ideCtrlParam.cls="static" ){ winform.ideCtrlParam.transparent = !(argb & 0xFF000000); if(winform.ideCtrlParam.transparent){ argb = 0; } } if(paramName=="borderColor"){ if(winform.ideCtrlParam.border){ winform.ideCtrlParam.border.color = argb : null; } } else { winform.ideCtrlParam[paramName] = argb===0 ? -1 : gdi.rgbReverse(argb); } thread.command.post("onColorChange",winform.ideCtrlName,argb,paramName,time.tick()); } winform.onDestroy = function(){ thread.command.post("onQuit"); } winform.onActivateApp = function(activated,threadId){ if(activated) winform.updateFromIde(); else { winform.lbControlInfo.text = "请在「窗体设计器」中选定控件,然后点这里" } } import ide; winform.updateFromIde = function(){ var ctrlParam; var ctrlName; if(ide.getActiveViewHwnd()){ ctrlName = ide.getSelectedControl(); if(ctrlName){ ctrlParam = ide.getControlParam(ctrlName); if(!ctrlParam) return; if(ctrlParam.cls==="plus"){ winform.radioForeColor.disabled = false; winform.radioIconColor.disabled = false; winform.radioBorderColor.disabled = false; } else if(ctrlParam.cls==="bkplus" || ctrlParam.cls==="bk"){ winform.setTimeout( function(){ if(winform.radioBorderColor.checked || winform.radioIconColor.checked){ winform.radioBgColor.checked = true; winform.radioBorderColor.checked = false; winform.radioIconColor.checked = false; } winform.radioForeColor.disabled = false; winform.radioIconColor.disabled = true; winform.radioBorderColor.disabled = true; } ) } else { winform.setTimeout( function(){ if(winform.radioBorderColor.checked || winform.radioIconColor.checked || winform.radioForeColor.checked ){ winform.radioBgColor.checked = true; winform.radioBorderColor.checked = false; winform.radioIconColor.checked = false; winform.radioForeColor.checked = false; } winform.radioForeColor.disabled = true; winform.radioIconColor.disabled = true; winform.radioBorderColor.disabled = true; } ) } winform.lbControlInfo.text = string.format("控件名:%s 类名:%s",ctrlName,ctrlParam.cls) var paramColor; if(winform.radioForeColor.checked){ paramColor = ctrlParam["forecolor"]; } elseif(winform.radioBgColor.checked){ paramColor = ctrlParam["bgcolor"]; } elseif(winform.radioTextColor.checked){ paramColor = ctrlParam["color"]; } elseif(winform.radioIconColor.checked){ paramColor = ctrlParam["iconColor"]; } elseif(winform.radioBorderColor.checked){ paramColor = ctrlParam.border[["color"]]; if(paramColor){ paramColor = gdi.rgbReverse(paramColor) } } winform.ideCtrlName = null;//暂时禁用 winform.colorPick.onColorChange if(paramColor===null || paramColor===-1){ winform.colorPick.setColor(0); } else { winform.colorPick.setColor(paramColor,true); } } else { winform.lbControlInfo.text = "请在「窗体设计器」中选定控件,然后点这里" } } else { winform.lbControlInfo.text = "请在「窗体设计器」中选定控件,然后点这里" } thread.command.onIdeCtrlActivated(ctrlName,ctrlParam) winform.ideCtrlParam = ctrlParam; winform.ideCtrlName = ctrlName; } winform.radioTextColor.oncommand = function(id,event){ winform.lbTip.text = winform.lbTip.text == "设计时使用 RGB 值" ? "ARGB 为 0 表示默认值" : "设计时使用 RGB 值"; if(winform.ideCtrlParam){ if(winform.ideCtrlParam.color===null){ winform.colorPick.setColor(0); } else { winform.colorPick.setColor(winform.ideCtrlParam.color,true); } } } winform.radioIconColor.oncommand = function(id,event){ winform.lbTip.text = winform.lbTip.text == "设计时使用 RGB 值" ? "ARGB 为 0 表示默认值" : "设计时使用 RGB 值"; if(winform.ideCtrlParam){ if(winform.ideCtrlParam.iconColor===null){ winform.colorPick.setColor(0); } else { winform.colorPick.setColor(winform.ideCtrlParam.iconColor,true); } } } winform.radioForeColor.oncommand = function(id,event){ winform.lbTip.text = winform.lbTip.text == "设计时使用 RGB 值" ? "ARGB 为 0 表示默认值" : "设计时使用 RGB 值"; if(winform.ideCtrlParam){ if(winform.ideCtrlParam.forecolor===null){ winform.colorPick.setColor(0); } else { winform.colorPick.setColor(winform.ideCtrlParam.forecolor,true); } } } winform.radioBgColor.oncommand = function(id,event){ winform.lbTip.text = winform.lbTip.text == "设计时使用 RGB 值" ? "ARGB 为 0 表示默认值" : "设计时使用 RGB 值"; if(winform.ideCtrlParam){ if(winform.ideCtrlParam.bgcolor===null){ winform.colorPick.setColor(0); } else { winform.colorPick.setColor(winform.ideCtrlParam.bgcolor,true); } } } winform.radioBorderColor.oncommand = function(id,event){ winform.lbTip.text = "设计时使用 ARGB 值"; if(winform.ideCtrlParam){ if(winform.ideCtrlParam.border[["color"]]===null){ winform.colorPick.setColor(0); } else { winform.colorPick.setColor(winform.ideCtrlParam.border[["color"]]); } } } win.lowerRight(winform.hwnd,1,1); winform.setIcon(win.ui.ctrl.pick.hIconColorPick); import win.ui.simpleWindow2; win.ui.simpleWindow2(winform); winform.show(); winform.updateFromIde(); win.loopMessage();