Inno setup 如何在Inno Setup Pascal脚本中使指定的T颜色变亮或变暗?
我需要根据我的Inno setup 如何在Inno Setup Pascal脚本中使指定的T颜色变亮或变暗?,inno-setup,percentage,pascalscript,tcolor,Inno Setup,Percentage,Pascalscript,Tcolor,我需要根据我的wpInfoBefore向导页面中显示的用户当前系统规范,自动更改状态栏(它是TPanel)的颜色。 我希望有两个函数可以通过输入t颜色作为值来正确执行此操作。但是,我曾多次尝试通过阅读类似的帖子来编写这些函数,甚至使用了RGBfunction,但都没有成功 例如,如果我需要使给定的t颜色变暗或变亮,我可能需要使用如下所示的功能: var 推荐状态颜色:t颜色; 函数颜色(颜色:t颜色,百分比:整数):t颜色; 开始 ... 结束; 函数深色颜色(颜色:t颜色,百分比:整数):t颜
wpInfoBefore
向导页面中显示的用户当前系统规范,自动更改状态栏(它是TPanel
)的颜色。
我希望有两个函数可以通过输入t颜色
作为值来正确执行此操作。但是,我曾多次尝试通过阅读类似的帖子来编写这些函数,甚至使用了RGB
function,但都没有成功
例如,如果我需要使给定的t颜色变暗或变亮,我可能需要使用如下所示的功能:
var
推荐状态颜色:t颜色;
函数颜色(颜色:t颜色,百分比:整数):t颜色;
开始
...
结束;
函数深色颜色(颜色:t颜色,百分比:整数):t颜色;
开始
...
结束;
推荐状态颜色:=$00D000;
如果。。。然后
StatusBar.Color:=LighteColor(推荐的StatusColor,75);
//使给定颜色变亮75%
如果。。。然后
StatusBar.Color:=深色(推荐的StatusColor,50);
//使给定颜色变暗50%
输出应该是修改过的(变亮或变暗)t颜色。
提前感谢。您必须将颜色转换为并更改亮度(L)或值(V),然后再转换回RGB
以下代码使用HSL(L=亮度)
函数GetRValue(RGB:Cardinal):字节;
开始
结果:=字节(rgb);
结束;
函数GetGValue(RGB:Cardinal):字节;
开始
结果:=字节(rgb shr 8);
结束;
函数GetBValue(RGB:基数):字节;
开始
结果:=字节(rgb shr 16);
结束;
函数Max(A,B:整数):整数;
开始
如果A>B,那么
结果:=A
其他的
结果:=B;
结束;
函数Min(A,B:整数):整数;
开始
如果A消色差情况}
开始
色调:=Trunc(HLSUndefined);
饱和度:=0;
结束
else{色格}
开始
{饱和}
如果亮度(HLSMAX),则
H:=H-HLSMAX;
色调:=圆形(H);
饱和度:=Trunc(S);
结束;
结束;
函数HueToRGB(Lum,Sat,色调:Double):整数;
变量
结果:双倍;
开始
{范围检查:注意传递的值加/减范围的三分之一}
如果(色调<0),则
色调:=色调+HLSMAX;
如果(色调>HLSMAX),则
色调:=色调-HLSMAX;
{从此tridrant返回r、g或b值}
如果(色调<(HLSMAX/6)),则
结果:=Lum+((Sat-Lum)*hue+(HLSMAX/12))/(HLSMAX/6))
否则,如果(色调<(HLSMAX/2)),则
ResultEx:=Sat
否则,如果(色调<((HLSMAX*2)/3)),则
结果:=Lum+((Sat-Lum)*((HLSMAX*2)/3)-色调)+(HLSMAX/12)/HLSMAX/6))
其他的
结果=Lum;
结果:=四舍五入(ResultEx);
结束;
函数RoundColor(值:Double):整数;
开始
如果值>255,则
结果:=255
其他的
结果:=四舍五入(数值);
结束;
函数RGB(R,G,B:Byte):基数;
开始
结果:=(基数(R)或(基数(G)SHL8)或(基数(B)SHL16));
结束;
函数ColorHLSToRGB(色调、亮度、饱和度:字):基数;
变量
R、 G,B:双倍;{RGB组件值}
Magic1,Magic2:双精度;{计算出的幻数(真的!)}
开始
如果(饱和度=0),则
开始{消色差情况}
R:=(亮度*RGBMAX)/HLSMAX;
G:=R;
B:=R;
如果(色调已定义),则
;{错误}
结束
其他的
开始{色格}
{设置幻数}
if(亮度