导入TRichEditViewer的外部RTF文件?

时间:2014-10-06 02:08:09

标签: inno-setup rtf

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

感激不尽的任何帮助。

2 个答案:

答案 0 :(得分:3)

您应该能够使用LoadStringFromFileRTF文件读入字符串。来自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);

然后使用类似于下面的代码。在此示例中,假设oRichViewerTRichEditViewer对象:

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中的其他一些字符。