Macros InnoSetup-从[Code]部分调用宏

Macros InnoSetup-从[Code]部分调用宏,macros,inno-setup,pascal,preprocessor,Macros,Inno Setup,Pascal,Preprocessor,我试图制作一个宏以避免重复代码和注释 我试过这个: #define GrowOnPage(any Page, any Component) Component.Width := Page.SurfaceWidth; Component.Anchors := [akLeft, akRight, akTop]; 但是,它找不到宏。我只是试着像调用普通函数/过程一样调用它: GrowOnPage(configPage, configTextField); 也许我完全误解了这里的宏。但是文档中没有任

我试图制作一个宏以避免重复代码和注释

我试过这个:

#define GrowOnPage(any Page, any Component) Component.Width := Page.SurfaceWidth; Component.Anchors := [akLeft, akRight, akTop];
但是,它找不到宏。我只是试着像调用普通函数/过程一样调用它:

GrowOnPage(configPage, configTextField);
也许我完全误解了这里的宏。但是文档中没有任何示例

我没有为此制定过程的原因是
锚定
属性在组件的公共父类中不可用,例如
TCustomEdit


解决此问题的正确方法是什么?

要评估预处理器函数,必须使用预处理器指令。实现这一点最常用的方法是使用

不过请注意,Inno设置预处理器函数与C宏不同。它们是真正的功能。因此,如果要使用它们生成脚本的一部分,它们必须计算为字符串。像这样:

#define GrowOnPage(str Page, str Component) \
    Component + ".Width := " + Page + ".SurfaceWidth; " + \
    Component + ".Anchors := [akLeft, akRight, akTop];"
然后像这样使用它:

#emit GrowOnPage("configPage", "configTextField")

是的,它在编译时是安全的。将此项添加到脚本末尾,以查看最后编译的内容:
#expr SaveToFile(AddBackslash(SourcePath)+“Preprocessed.iss”)