我在项目中使用字体“Consolas”和/或“Courier New”来绘制一个 MS-DOS 外观的环境。在这个项目中,如果我使用 TextOut(TCanvas 的)在一个语句中按顺序打印 Box Drawing 字符,一切都很好,例如它打印“────────”但是如果我处理每个字符来打印它们单独地,每个字符之间会有一个间隙,例如:“----------”。这是一个手动测试的示例:
...
Canvas.Font.Size := 12;
w := Canvas.TextWidth('╬');
h := Canvas.TextHeight('╬');
Canvas.TextOut(100, 100, '╬╬');
Canvas.TextOut(100, 100 + h, '╬');
Canvas.TextOut(100 + w, 100 + h, '╬');
Canvas.TextOut(100, 100 + h * 2, '╬');
Canvas.TextOut(100 + w, 100 + h * 2, '╬');
输出是:
如您所见,它们在垂直方向上连接良好,但在水平方向上存在间隙。
我该如何解决?请注意,我在数组中绘制了我想要的内容,然后一个过程将数组打印如下:
th := Canvas.TextHeight('A');
tw := Canvas.TextWidth('A');
for i := 0 to MaxWidth - 1 do
for j := 0 to MaxHeight - 1 do
begin
Canvas.Brush.Color := fChars[i, j].BGColor;
Canvas.Font.Color := fChars[i, j].FGColor;
Canvas.TextOut(i * tw, j * th, fChars[i, j].Character);
end;
