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