我试图按照这个示例来了解如何使用TextRect()画布上的居中文本,但它似乎已经过时并且不起作用,因为不再有TTextStyle。相反,TextRect()采用称为TTextFormat.
该线程的原始代码:
procedure TForm1.Button1Click(Sender: TObject);
var
ts: TTextStyle;
begin
Canvas.Font.Size:=22;
Canvas.Font.Color:=clRed;
ts := Canvas.TextStyle;
ts.Alignment := taCenter;
ts.Layout := tlCenter;
Canvas.TextRect(Rect(100, 100, 300, 300), 0, 0, 'Hello', ts); // Rect within text is centered, dummy x, dummy y, text, text style
end;
Run Code Online (Sandbox Code Playgroud)
TextRect文档没有提供任何如何使用的示例,TTextFormat包括示例FrameRect。
我点击了一些链接TextFlags,但那里没有对齐标志。
我猜现在它是一个带有标志的数组,但是水平和垂直中心对齐的标志是什么?这个例子将如何更新?
首先,在 Windows 中,您无法在按钮的单击处理程序中绘制到画布。您只能在窗口的绘画处理程序中绘制画布。
要尝试此操作,请创建一个新的 VCL 应用程序OnPaint并向主窗体添加一个处理程序:
procedure TForm1.FormPaint(Sender: TObject);
begin
// Fill entire window with white background colour
Canvas.Brush.Color := clWhite;
Canvas.FillRect(ClientRect);
// Draw text in the middle
Canvas.Font.Color := clBlack;
Canvas.Font.Size := 32;
var R := ClientRect;
var S := 'Hello, World!';
Canvas.TextRect(R, S, [tfSingleLine, tfVerticalCenter, tfCenter, tfEndEllipsis]);
end;
Run Code Online (Sandbox Code Playgroud)
首先,我们用白色填充整个窗口。这是我们的背景颜色。
然后,我们使用绘制文本
Canvas.TextRect(R, S, [tfSingleLine, tfVerticalCenter, tfCenter, tfEndEllipsis]);
Run Code Online (Sandbox Code Playgroud)
该tfCenter标志指示函数将文本水平居中。该tfVerticalCenter标志指示它垂直居中,这只有在我们也指定该tfSingleLine标志时才可能实现。该tfEndEllipsis标志是可选的;如果文本不适合矩形,它将用省略号 (...) 截断文本。
(为了获得奖励积分,请添加一个单行OnResize处理程序,该处理程序会Invalidate在调整窗口大小时调用重绘整个窗口。)
VCL画布的TextRect功能是使用Win32DrawText函数实现的,该函数有很好的文档记录。