你从不显示TImage
? 那么你应该真正使用离屏位图。这是实现双缓冲(无闪烁渲染)的一种非常常用的技术。
例如,
var
bm: TBitmap;
procedure InitOffscreenBitmap;
begin
bm := TBitmap.Create;
bm.SetSize(bmWidth, bmHeight);
end;
procedure DrawBitmap;
begin
// Draw on bm
end;
procedure Swap;
begin
BitBlt(Canvas.Handle, X, Y, bmWidth, bmHeight, bm.Canvas.Handle, 0, 0, SRCCOPY)
end;
如果您使用的是现代版本的 Windows(例如 Vista+),或启用了 ClearType 的 Windows XP(出于某种非常奇怪的原因,默认情况下它被禁用),文本应该是平滑的。只需确保使用现代字体即可。它们中的大多数都可以,但是使用 ClearType 无法平滑 MS Sans Serif 等非常旧的字体。
此外,自然地,必须bm
具有与表单相同的背景颜色,因为在绘制文本时会发生 alpha 混合bm
。所以如果表格是clRed
(出于某种不正当的原因),你需要做
bm.Canvas.Brush.Color := clRed;
bm.Canvas.Brush.Style := bsSolid;
bm.FillRect(Rect(0, 0, bmWidth, bmHeight));
之前
bm.TextOut(...)
就这样我们在谈论同一件事:这还不够流畅吗?
procedure TForm3.FormPaint(Sender: TObject);
begin
Canvas.Font.Name := 'Segoe UI';
Canvas.Font.Height := 64;
Canvas.TextOut(10, 10, 'This is an example.');
end;

(高分辨率)