将 Inno Setup 许可证备忘录切换到 RTL 模式

Switch Inno Setup license memo to RTL mode

我正在创建一个多语言安装程序, 有些语言需要RTL方向才能自然显示。 这是我用于许可页面的代码:

LicenseMemo := TNewMemo.Create(WizardForm);
with LicenseMemo do
begin
  Parent     := WizardForm.LicensePage;
  Left       := ScaleX(0);
  Top        := ScaleY(50);
  Width      := ScaleX(520);
  Height     := ScaleY(210);
  Color      := TColor($d3d3d3);
  Font.Color := clBlack;
  ScrollBars := ssVertical;
  Text       := WizardForm.LicenseMemo.Text;
  LicenseMemo.Font.Size := 12
  ReadOnly   := True;
end;

我知道我可以通过将 RightToLeft=yes 添加到 [LangOptions] 来使程序完全 RTL。但它让程序看起来很糟糕——我只需要 RTL 用于许可页面。任何人都可以帮忙吗?我使用 RTF 文件作为许可页面。

使用TRichEditViewer并添加WS_EX_LAYOUTRTL to its GWL_EXSTYLE:

const 
  GWL_EXSTYLE = -20;
  WS_EX_LAYOUTRTL = 0000;

function GetWindowLong(hWnd: THandle; Index: Integer): LongInt;
  external 'GetWindowLongW@User32.dll stdcall';
function SetWindowLong(hWnd: THandle; Index: Integer; NewLong: LongInt): LongInt;
  external 'SetWindowLongW@user32.dll stdcall';
SetWindowLong(
  RichEditViewer.Handle, GWL_EXSTYLE,
  GetWindowLong(RichEditViewer.Handle, GWL_EXSTYLE) or WS_EX_LAYOUTRTL);