如何在delphi中一次将具有不同字体格式的文本绘制到画布?

Rai*_*ith 9 delphi

我一直在使用DrawText我所有的"矩形文本"输出需求,但是我没有看到绘制字符串的方法,例如,每个其他单词都是粗体或不同的颜色,或者更糟糕的是,不同的背景对于所述随机选择的单词.据我所知,可能没有单一程序可以做到这一点,我可能错了,这是这个问题的要点.有人能指出试图达到这种效果的人可能感兴趣的程序吗?另外,如果我是正确的并且没有简单的方法,那么建议的路径是什么?分别绘制每个单词,然后尝试将所有这些粘合在一起似乎是一场噩梦,当你开始考虑可能由此产生的问题时,我的头脑:当你有不同的字体或大小时,在单个水平线上进行正确的文本对齐. ..

我有delphi xe3; 如果有人可以改进我的问题和/或文字的措辞,请这样做.

And*_*and 19

您可以从VCL获得一些帮助,因为该TCanvas.TextOut方法会增加x笔位的坐标乘以输出字符串的宽度:

procedure TForm1.FormPaint(Sender: TObject);
begin
  Canvas.MoveTo(20, 100);

  Canvas.Font.Name := 'Segoe UI';
  Canvas.Font.Color := clMaroon;
  Canvas.Font.Style := [];
  Canvas.Font.Height := 64;
  Canvas.TextOut(Canvas.PenPos.X, Canvas.PenPos.Y, 'This ');

  Canvas.Font.Color := clNavy;
  Canvas.Font.Style := [fsBold];
  Canvas.Font.Height := 64;
  Canvas.TextOut(Canvas.PenPos.X, Canvas.PenPos.Y, 'is ');

  Canvas.Font.Name := 'Bookman Old Style';
  Canvas.Font.Color := clBlack;
  Canvas.Font.Style := [fsItalic];
  Canvas.Font.Height := 64;
  Canvas.TextOut(Canvas.PenPos.X, Canvas.PenPos.Y, 'a ');

  Canvas.Font.Name := 'Courier New';
  Canvas.Font.Color := clSilver;
  Canvas.Font.Style := [];
  Canvas.Font.Height := 64;
  Canvas.TextOut(Canvas.PenPos.X, Canvas.PenPos.Y, 'test!');
end;
Run Code Online (Sandbox Code Playgroud)

截图http://privat.rejbrand.se/canvastextpos.png

无论如何,如果你需要更高级的文本输出例程,为什么不看看DirectWrite呢?