在另一个问题中,我询问了如何将一个RTF文件导入InnoSetup以用于自定义向导页面:
Import external RTF file for TRichEditViewer?
不幸的是,我只能弄清楚如何使用答案,以便在用户系统上存在该文件时加载外部文件,在这种情况下,它不存在于用户的系统中;这是我创建的用于显示安装程序的文件。
我无法弄清楚如何加载外部文件,以便将其保存在已编译的安装程序脚本中,并在其他人的系统中可见。
这是我放在一起的代码。我已经尝试创建用于加载字符串的单独过程,但是无法弄清楚如何使其工作。我将不胜感激任何帮助:
procedure CreateTheWizardPages;
var
#ifndef UNICODE
rtfstr: string;
#else
rtfstr: AnsiString;
#endif
var
Page: TWizardPage;
RichEditViewer: TRichEditViewer;
vDosFolder: String;
begin
LoadStringFromFile('c:\dropbox\vdosinst\custom.rtf', rtfstr);
if RegQueryStringValue(HKEY_CURRENT_USER, 'Software\WPDOS.org','vDosDir', vDosFolder) then
begin
if ((DirExists(vDosFolder + '\62Config')) OR (DirExists(vDosFolder + '\61Config')) OR (DirExists(vDosFolder + '\51Config'))) then
begin
Page := CreateCustomPage(wpInfoBefore, 'How to install vDosWP-VDM with an existing vDosWP system', 'Read this message for important information!');
RichEditViewer := TRichEditViewer.Create(Page);
RichEditViewer.Width := Page.SurfaceWidth;
RichEditViewer.Height := Page.SurfaceHeight;
RichEditViewer.Parent := Page.Surface;
RichEditViewer.ScrollBars := ssVertical;
RichEditViewer.UseRichEdit := True;
RichEditViewer.RTFText := rtfstr;
RichEditViewer.ReadOnly := True;
end;
end;
end;
procedure InitializeWizard(); // ISSI_ added to string
begin
CreateTheWizardPages;
end;
答案 0 :(得分:2)
您可以在代码块之前添加此编译时宏:
#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
此宏将文件内容输出为字符串常量。这适用于大多数RTF文件,但RTF中的某些字符可能会破坏此代码。
要解决此问题,您需要转发'
,"
,并且可能是ProcessFileLine
sub中的其他一些字符。
然后你可以用这种方式在[Code]
块中使用这个宏:
RichEditViewer.RTFText := {#emit ReadFileAsStr("custom.rtf")};