表示したことはありません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を使用している場合(非常に奇妙な理由で、デフォルトでは無効になっています)、テキストは滑らかである必要があります。必ず最新のフォントを使用してください。それらのほとんどは機能しますが、MSSansSerifなどの非常に古いフォントはClearTypeを使用してスムージングできません。
また、当然のことながら、bm
テキストがに描画されるときにアルファブレンディングが発生するため、フォームと同じ背景色を持つことが不可欠です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;

(高解像度)