gpt4 book ai didi

delphi textrect 带有角度和自动换行并垂直对齐

转载 作者:行者123 更新时间:2023-12-02 01:14:39 25 4
gpt4 key购买 nike

我想使用 Canvas.TextRect 在 Canvas 上以 90 度角和自动换行功能书写一些内容。我还希望文本在矩形中垂直对齐。我该怎么做?

最佳答案

以下是创建垂直字体的示例代码:

function MakeVerticalFont(f: TFont): TFont;
var
lf : TLogFont;
tf : TFont;
begin
tf := TFont.Create;

tf.Assign( f );
GetObject(tf.Handle, sizeof(lf), @lf);
lf.lfEscapement := 900; // <--
lf.lfOrientation := 900; // <-- here we specify a rotation angle
tf.Handle := CreateFontIndirect(lf);

result := tf;
end;
[...]

var tf: TFont;
Begin
...
tf := MakeVerticalFont( mycanvas.Font );
mycanvas.Font.Assign( tf ); // <--- assign the `same` font rotated by 90 degrees
...

更新:尝试在表单上呈现垂直文本:

    var tf : TFont;
tmpcanvas : TCanvas;
begin
tmpcanvas := form1.Canvas;
tmpcanvas.Font.Name := 'Arial';
tmpcanvas.Font.Height := 12;

tf := MakeVerticalFont(tmpcanvas.font);
tmpcanvas.Font.Assign(tf);

tmpcanvas.TextOut(50, 50, 'Am I vertical?');
tf.free;

更新 2:我认为最好使用 DrawTextEx Function它支持文本对齐和自动换行。

我的 Delphi 版本未将其包含在文档中,但您可以在上面的链接中看到各种标志。 下面是一个示例代码,您可以了解如何使用它。我禁用了垂直字体,因为似乎自动换行不适用于垂直字体。

procedure TForm1.Button1Click(Sender: TObject);
var tf : TFont;
tmpcanvas : TCanvas;
rc: TRect;
s : string;
begin
tmpcanvas := form1.Canvas;
tmpcanvas.Font.Name := 'Arial';
tmpcanvas.Font.Height := 14;

tf := MakeVerticalFont(tmpcanvas.font);
//tmpcanvas.Font.Assign(tf); <--- `disabled`

s := 'Hello world! I''m a long string';
rc := RECT(10, 10, 50, 200);
windows.DrawTextEx(
tmpcanvas.Handle,
PChar(s),
length(s),
rc,
DT_LEFT or DT_WORDBREAK,
nil);

tf.Free;
end;

请注意,当您想要对齐矩形中的文本时,应使用 DT_SINGLELINE 标志。
例如,此组合:DT_CENTER 或 DT_VCENTER 或 DT_SINGLELINE 将使文本居中于矩形的中间。

关于delphi textrect 带有角度和自动换行并垂直对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1641803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com