我在Inno Setup腳本的自定義頁面上使用TRichEditViewer。是否可以將外部RTF文件讀入變量,並將該變量用作查看器的內容?或者我必須在腳本中保留實際的RTF代碼?爲TRichEditViewer導入外部RTF文件?
任何幫助感激地收到。
我在Inno Setup腳本的自定義頁面上使用TRichEditViewer。是否可以將外部RTF文件讀入變量,並將該變量用作查看器的內容?或者我必須在腳本中保留實際的RTF代碼?爲TRichEditViewer導入外部RTF文件?
任何幫助感激地收到。
您應該可以使用LoadStringFromFile
將RTF
文件讀入字符串。從英諾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然後使用類似於下面的代碼。在這個例子中假設oRichViewer
是TRichEditViewer
對象:
oRichViewer.UseRichEdit := True;
oRichViewer.RTFText := rtfstr;
這應該有把rtfstr
的,我們從文件中較早裝入TRichEditViewer
效果。
精美清晰,不正是我所要求的。謝謝! – emendelson 2014-10-06 12:36:39
應該在編譯時加載'filenamehere.rtf'文件嗎? – 2017-11-01 10:11:55
如果您不想在顯示文件之前將.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
子中的一些其他字符。
也許你應該通過解釋它確實沒有做到,OP要求什麼以及爲什麼選擇這個解決方案來開始答案。 – 2017-11-01 10:34:23
我想我的回答完全是OP要求的。這是替代解決方案。我在答案中增加了更多解釋。 – 2017-11-01 15:54:32
你的後續問題:?LoadStringFromFile到編譯腳本(上沒有文件系統,以便提供)(https://stackoverflow.com/q/26315825/850848) – 2017-11-01 10:35:20