Inno setup 是否为TRichEditViewer导入外部RTF文件?

Inno setup 是否为TRichEditViewer导入外部RTF文件?,inno-setup,rtf,Inno Setup,Rtf,我正在Inno设置脚本的自定义页面上使用TRichEditViewer。是否可以将外部RTF文件读入变量,并将该变量用作查看器的内容?或者我必须在脚本中保留实际的RTF代码吗 感谢您的帮助。您应该能够使用LoadStringFromFile将RTF文件读入字符串。来自Inno: 原型: 函数LoadStringFromFile(常量文件名:String;变量S:AnsiString):布尔值 说明: 将指定的二进制或非Unicode文本文件加载到指定的字符串中。如果成功,则返回True,否则返回

我正在Inno设置脚本的自定义页面上使用
TRichEditViewer
。是否可以将外部RTF文件读入变量,并将该变量用作查看器的内容?或者我必须在脚本中保留实际的RTF代码吗


感谢您的帮助。

您应该能够使用
LoadStringFromFile
RTF
文件读入字符串。来自Inno:

原型:

函数LoadStringFromFile(常量文件名:String;变量S:AnsiString):布尔值

说明:

将指定的二进制或非Unicode文本文件加载到指定的字符串中。如果成功,则返回True,否则返回False

您应该能够为ANSI Inno设置定义
字符串
类型变量,或为Unicode Inno设置定义
AnsiString
类型变量,如下所示:

var
#ifndef UNICODE
  rtfstr: string;
#else
  rtfstr: AnsiString;
#endif
然后在代码中:

LoadStringFromFile('filenamehere.rtf', rtfstr);
然后使用与下面类似的代码。在本例中,假设
oRichViewer
是一个
TRichEditViewer
对象:

oRichViewer.UseRichEdit := True;
oRichViewer.RTFText := rtfstr;

如果您不想在显示
.rtf
文件之前将其复制到临时文件夹中,并且希望在编译时用rtf内容填充变量,那么这应该具有将先前从文件加载的
rtfstr
放入
TRichEditViewer
的效果-您可以使用

首先,创建一个宏
ReadFileAsStr

#pragma parseroption -p- 

#define FileHandle
#define FileLine
#define FileName
#define Result
#sub ProcessFileLine
  #define FileLine = FileRead(FileHandle) 
  #if Len(Result) > 0 && !FileEof(FileHandle)
    #expr Result = Result + "#10#13 +  \n"
  #endif
  #if FileLine != '\0'
    #expr Result = Result + "'" + FileLine + "'"
  #endif
#endsub
#sub ProcessFile
  #for {FileHandle = FileOpen(FileName); \
    FileHandle && !FileEof(FileHandle); ""} \
    ProcessFileLine
  #if FileHandle
    #expr FileClose(FileHandle)
  #endif   
#endsub

#define ReadFileAsStr(str AFileName) \
  Result = '', FileName = AFileName, ProcessFile, Result
并使用它:

var
  rtfstr := {#emit ReadFileAsStr("path_to.rtf")};

这适用于大多数RTF文件,但RTF中的某些字符可能会破坏此代码。要解决此问题,您需要转义
,并且可能是
ProcessFileLine
sub.

中的一些其他字符非常清晰,并且完全符合我的要求。非常感谢。编译时会加载哪些文件
filenamehere.rtf
?也许你应该在开始回答时解释一下,它确实不起作用,OP要求了什么,以及为什么选择这个解决方案。我想我的答案正是OP要求的。这是另一种解决方案。我在回答中添加了更多解释。您的后续问题: