我想在希伯来语环境中的TCanvas上编写Text。我设置了WS_EX_LAYOUTRTL
标志:
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_LAYOUTRTL;
end;
当我在带有TextOut的TCanvas上写文本时,例如 Canvas.TextOut(10,10,'Hello World'); 文本显示右对齐(我想要的)但写入镜像(我不想要的)。
您对如何保留表单的RTL布局并显示未镜像的文本有任何建议吗?希伯来文本也被反映出来,因此不应该是它应该是什么。
我还在顶部的标签上添加了希伯来文“שם”(= name)。写作是正确的。使用TextOut在画布上绘制的相同文本显示镜像的希伯来语,这是错误的。
afik设置WS_EX_LAYOUTRTL
标志是说明对话框应该被镜像的正确方法,因为有些Delphi控件没有正确实现BiDi模式。
答案 0 :(得分:0)
我定义了一个具有以下属性的表单:
object Form1: TForm1
Left = 192
Top = 114
Width = 870
Height = 640
BiDiMode = bdRightToLeft
Caption = 'Form1'
Color = clBtnFace
Font.Charset = HEBREW_CHARSET
Font.Color = clWindowText
Font.Height = -19
Font.Name = 'FrankRuehl'
Font.Style = []
OldCreateOrder = False
ParentBiDiMode = False
OnPaint = FormPaint
PixelsPerInch = 96
TextHeight = 18
end
并编写以下代码
procedure TForm1.FormPaint(Sender: TObject);
begin
canvas.textout (100, 100, 'שלום עולם');
end;
输出符合预期,从右到左。。
我认为没有必要覆盖CreateParams。