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(亮度