在 Inno Setup [代码] 部分将宏扩展为 Pascal 代码
Expanding macros to Pascal Code in Inno Setup [Code] section
我试图制作一个宏来避免重复代码和注释。
我试过这个:
#define GrowOnPage(any Page, any Component) Component.Width := Page.SurfaceWidth; Component.Anchors := [akLeft, akRight, akTop];
但是,找不到宏。我只是尝试像普通函数/过程一样调用它:
GrowOnPage(configPage, configTextField);
也许我完全误解了这里的宏。但是文档没有任何示例。
我没有为此制定程序的原因是 Anchors
属性 在组件的共同父 class 中不可用,例如 TCustomEdit
.
解决这个问题的正确方法是什么?
要计算预处理器函数,您必须使用预处理器指令。最常用的方法是使用 #emit
directive.
不过请注意,Inno Setup 预处理器 函数 与 C macros 不同。它们实际上是 函数 。因此,如果您想使用它们来生成脚本的一部分,则它们必须评估为一个字符串。像这样:
#define GrowOnPage(str Page, str Component) \
Component + ".Width := " + Page + ".SurfaceWidth; " + \
Component + ".Anchors := [akLeft, akRight, akTop];"
并像这样使用它:
#emit GrowOnPage("configPage", "configTextField")
我试图制作一个宏来避免重复代码和注释。
我试过这个:
#define GrowOnPage(any Page, any Component) Component.Width := Page.SurfaceWidth; Component.Anchors := [akLeft, akRight, akTop];
但是,找不到宏。我只是尝试像普通函数/过程一样调用它:
GrowOnPage(configPage, configTextField);
也许我完全误解了这里的宏。但是文档没有任何示例。
我没有为此制定程序的原因是 Anchors
属性 在组件的共同父 class 中不可用,例如 TCustomEdit
.
解决这个问题的正确方法是什么?
要计算预处理器函数,您必须使用预处理器指令。最常用的方法是使用 #emit
directive.
不过请注意,Inno Setup 预处理器 函数 与 C macros 不同。它们实际上是 函数 。因此,如果您想使用它们来生成脚本的一部分,则它们必须评估为一个字符串。像这样:
#define GrowOnPage(str Page, str Component) \
Component + ".Width := " + Page + ".SurfaceWidth; " + \
Component + ".Anchors := [akLeft, akRight, akTop];"
并像这样使用它:
#emit GrowOnPage("configPage", "configTextField")