将 Inno Setup Pascal Script TColor 转换为 HTML 十六进制颜色

问题描述 投票:0回答:2

Inno Setup Pascal Script 有颜色变量,如 Delphi 中的

clBtnFace
clYellow

我想知道如何将这些

TColor
转换为 HTML 十六进制颜色。

例如,如果我将

clBtnFace
转换为 HTML 十六进制颜色,结果应该是
#497AC2
。如果我将
clYellow
转换为 HTML 十六进制颜色,结果应该是
#FFFF00

我在上面找到了很多例子,但它们都是针对 RGB 颜色的。我想将

TColor
转换为 HTML 十六进制颜色,以用作我的 Pascal 脚本中 ImageMagick 的命令行参数中的十六进制颜色,如
...xc:#497AC2...

提前致谢。

hex inno-setup pascalscript
2个回答
2
投票
function ColorToWebColorStr(Color: TColor): string;
var
  RGB: Integer;
begin
  RGB := ColorToRGB(Color);
  Result :=
    Format('#%.2x%.2x%.2x', [Byte(RGB), Byte(RGB shr 8), Byte(RGB shr 16)]);
  Result := UpperCase(Result);
end;

对于

ColorToRGB
,请参阅将 Inno Setup WizardForm.Color 转换为 RGB


但请注意,将其与系统颜色(

clXXX
常量)一起使用对于现代主题版本的 Windows 没有什么意义。例如
clBtnFace
将始终返回系统颜色。这与表格的实际颜色无关。每种形式可以有不同的颜色/皮肤。
clBtnFace
始终相同。实际上,即使使用系统皮肤/主题,实际的表单颜色也与现代版本的 Windows 上的
clBtnFace
不同。如果您关闭 Windows 中的主题(即使用经典的 Windows 2000 外观),实际的表单颜色仅为
clBtnFace


0
投票

这是另一种方法:

function TColorToHex(aColor: TColor): String;
begin
  var RGB := ColorToRGB(aColor);
  Result := '#' +
            Byte(RGB).ToHexString +
            Byte(RGB shr 8).ToHexString +
            Byte(RGB shr 16).ToHexString;
end;
© www.soinside.com 2019 - 2024. All rights reserved.