Вы никогда не отображаете 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 +) или Windows XP с включенным ClearType (по какой-то очень странной причине, он по умолчанию отключен), текст должен быть гладким. Просто убедитесь, что вы используете современный шрифт. Большинство из них подойдут, но очень старые шрифты, такие как MS Sans Serif, нельзя сгладить с помощью 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;
Пример вывода текста http://privat.rejbrand.se/sampletext.png
(High-Res)