【问题标题】:InnoSetup, How to load a custom text into RTFTextInno Setup,如何将自定义文本加载到 RTF 文本中
【发布时间】:2013-04-20 18:44:06
【问题描述】:

我正在尝试将 InfoBefore 文本文件的文本存储到一个变量中,然后使用自定义字体颜色和背景色将其加载到 RTFEditor 中。

当我尝试从变量加载文本时,它显示“只写属性”

我需要一个明确的示例来说明如何同时完成这两项操作(将文本存储在 var 中,使用自定义颜色和背景色加载 RTF 中的文本)而不会使事情过于复杂,因为我不知道 Pascal .

这是代码:

const
 FontColor: AnsiString = 'cf0'; 
 BackColor: AnsiString = 'cf1'

 var
  OldText: AnsiString; 

procedure InitializeWizard();
begin

// I try to store the text in a variable
Oldtext := WizardForm.InfoBeforeMemo.RTFText; 

// I try to load from the variable, with a new font color for ALL the text, and a new BackColor.
WizardForm.InfoBeforeMemo.RTFText := Oldtext + FontColor

end;

【问题讨论】:

  • TRichEditViewer 类没有RTFText 属性的读取权限,因此如果没有 Windows API,就无法从那里读取 RTF 文本。所以实际上没有没有复杂化的事情
  • 更具体地说,TRichEditViewer 控件的 RTF 读取实现是关于 EM_STREAMOUT 消息及其 EditStreamCallback 回调函数,您需要用一些 external library 包装它。
  • omg... 似乎太难了,谢谢您提供的信息。将 InfoBeforeFile 存储在 var 中的任何其他方式?
  • 不,恐怕这是唯一可能的方法(除了修改TRichEditViewer 类并重新构建InnoSetup)。你打算修改字体,不是吗?还有一种不同的方法可以通过EM_SETCHARFORMAT 消息在富编辑中修改特定文本的字体属性(在我看来更直接)。抱歉,我没有发布答案,因为这些天我在这里很沮丧,但如果你愿意,我可以发布一个使用示例(这比使用原始 RTF 容易得多)。
  • @TLama 非常感谢您的帮助,如果您愿意,您可以发布一个答案,我可以按照您的步骤(复制和粘贴)来做我需要的事情,然后再次感谢,否则我真的不能那样做,因为从来没有接触过 Pascal 或打算学习更多使用这个 InnoSetup 脚本的必要性,也许你会认为答案会因为这个原因浪费时间,所以不要担心,如果你不想回答,但对其他人也有用。

标签: inno-setup pascal rtf pascalscript


【解决方案1】:

与其在事后尝试修改它,只需在写字板中加载您的 .txt 文件,进行所需的格式更改,然后将其保存为 .rtf 格式。然后,您可以直接将此文件用作您的InfoBeforeFile,而无需使用任何代码。

编辑:如果你想改变整个备忘录的背景颜色,那么你仍然需要一行代码。例如:

[Code]
procedure InitializeWizard();
begin
    WizardForm.InfoBeforeMemo.Color := clBlack;
end;

【讨论】:

  • 哇似乎是更好的选择,谢谢,你知道我是否也可以用这种方法改变背景颜色吗?不能举一个带有空白背景色和黑色文本颜色的文本示例吗?
  • 是和不是。据我所知,RTF 没有指定一种方法来定义整个页面的背景颜色,只定义单个段落的背景颜色。 (并且写字板不提供设置段落背景颜色的方法,但它可以让您设置具有类似效果的突出显示颜色 - 尽管如果您更改整个备忘录则不需要它。)如果您想要整体更改整个备忘录的背景颜色,那么您仍然需要一行代码,我已将其编辑到上面的答案中。
猜你喜欢
  • 1970-01-01
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多