Inno setup Inno设置定义十六进制颜色常量

Inno setup Inno设置定义十六进制颜色常量,inno-setup,Inno Setup,我试图使用[ISPP]部分定义一种十六进制颜色,该颜色稍后将在[code]部分中用作专色,其值将来可能会更改,但运行时出现类型不匹配错误。以下是守则中的相关章节: [ISPP] #define ColorPetrol "$C8C264" [Code] procedure InitializeWizard(); var PortLabel: TNewStaticText; begin PortLabel := TNewStaticText.Create(WizardForm); Po

我试图使用
[ISPP]
部分定义一种十六进制颜色,该颜色稍后将在
[code]
部分中用作专色,其值将来可能会更改,但运行时出现类型不匹配错误。以下是守则中的相关章节:

[ISPP]
#define ColorPetrol "$C8C264"

[Code]
procedure InitializeWizard();
var
  PortLabel: TNewStaticText;
begin
  PortLabel := TNewStaticText.Create(WizardForm);
  PortLabel.Caption := 'Port';
  PortLabel.Top := ScaleY(78);
  PortLabel.Parent := Page.Surface;
  PortLabel.Font.Color := ExpandConstant('{#ColorPetrol}');
end;

我假设这个错误是由define常量是字符串和要求十六进制值的
PortLabel.Font.Color
引起的。如何在
[ISPP]
部分中定义常量并以这种方式正确使用?

只需使用
PortLabel.Font.Color:={colorpoll}
ExpandConstant()
用于扩展内置的Inno设置常量,而不是用于ISPP定义。后者实际上只是文本替换


作为旁注,我不知道有
[ISPP]
部分。在我看来,您应该将定义移到
[code]
部分。

没错。该
ExpandConstant
调用将在预处理后展开字符串
“$C8C264”
。但是在哪里定义变量(或宏)并不重要。唯一的规则是在使用它之前必须定义它(不管它是什么),因为预处理是从文件的顶部到底部进行的。我猜,
[ISPP]
将是Inno Script Studio之类工具的虚拟部分。有一个提示,如果您在脚本的最末尾添加类似于
#expr SaveToFile('C:\PreprocessedScript.iss')
的行,那么整个预处理的脚本将保存到一个文件中,您将看到它是如何处理的。