我在Inno安装脚本的自定义页面上使用TRichEditViewer
。是否可以将外部RTF文件读入变量,并将该变量用作查看器的内容?或者我是否必须在脚本中保留实际的RTF代码?
感激不尽的任何帮助。
答案 0 :(得分:3)
您应该能够使用LoadStringFromFile
将RTF
文件读入字符串。来自Inno documentation:
原型:
function LoadStringFromFile (const FileName:String; var S:AnsiString):Boolean;
说明
将指定的二进制或非Unicode文本文件加载到指定的字符串中。如果成功则返回True,否则返回False。
您应该可以使用类似的内容为 Unicode Inno Setup 为 ANSI Inno Setup 或string
类型变量定义AnsiString
类型变量:
var
#ifndef UNICODE
rtfstr: string;
#else
rtfstr: AnsiString;
#endif
然后在代码中:
LoadStringFromFile('filenamehere.rtf', rtfstr);
然后使用类似于下面的代码。在此示例中,假设oRichViewer
是TRichEditViewer
对象:
oRichViewer.UseRichEdit := True;
oRichViewer.RTFText := rtfstr;
这应该会将我们之前从文件加载的rtfstr
放入TRichEditViewer
。
答案 1 :(得分:0)
如果您不希望在显示.rtf
文件之前将其复制到临时文件夹,并希望在编译时使用RTF内容填充变量,则可以使用Inno Setup Preprocessor。< / p>
首先,创建一个宏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中的其他一些字符。