2014-10-06 66 views
2

我在Inno Setup腳本的自定義頁面上使用TRichEditViewer。是否可以將外部RTF文件讀入變量,並將該變量用作查看器的內容?或者我必須在腳本中保留實際的RTF代碼?爲TRichEditViewer導入外部RTF文件?

任何幫助感激地收到。

+0

你的後續問題:?LoadStringFromFile到編譯腳本(上沒有文件系統,以便提供)(https://stackoverflow.com/q/26315825/850848) – 2017-11-01 10:35:20

回答

2

您應該可以使用LoadStringFromFileRTF文件讀入字符串。從英諾documentation

原型:

功能LoadStringFromFile(常量文件名:字符串; VAR S:AnsiString類型):布爾值;

說明:

加載指定的二進制或非Unicode文本文件到指定的字符串。如果成功則返回True,否則返回False。

你應該能夠定義ANSI Inno Setup的AnsiString類型變量string類型變量的Unicode Inno Setup的使用類似爲:

var 
#ifndef UNICODE 
    rtfstr: string; 
#else 
    rtfstr: AnsiString; 
#endif 

然後在代碼:

LoadStringFromFile('filenamehere.rtf', rtfstr); 

A然後使用類似於下面的代碼。在這個例子中假設oRichViewerTRichEditViewer對象:

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

這應該有把rtfstr的,我們從文件中較早裝入TRichEditViewer效果。

+0

精美清晰,不正是我所要求的。謝謝! – emendelson 2014-10-06 12:36:39

+0

應該在編譯時加載'filenamehere.rtf'文件嗎? – 2017-11-01 10:11:55

0

如果您不想在顯示文件之前將.rtf文件複製到臨時文件夾中,並且希望在編譯時使用RTF內容填充變量 - 您可以使用Inno Setup Preprocessor

首先,創建一個宏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子中的一些其他字符。

+0

也許你應該通過解釋它確實沒有做到,OP要求什麼以及爲什麼選擇這個解決方案來開始答案。 – 2017-11-01 10:34:23

+1

我想我的回答完全是OP要求的。這是替代解決方案。我在答案中增加了更多解釋。 – 2017-11-01 15:54:32