将 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);
我正在创建一个多语言安装程序, 有些语言需要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);