白色空间是否有宽度?

时间:2012-08-14 15:42:27

标签: .net string whitespace padding delphi-prism

我对白色空间感到困惑。我正在尝试用绳子填充它,它不会与我合作。

我想打印一个datagridview,所以我有列标题,下面是实际的行。无论我如何确定填充弦的确切长度或宽度,它都太短或太长。因此,在发送到打印机之前,我无法将值与列标题对齐。

如果我只是执行以下操作:

thestring := '.NET is cool';
thestring := thestring.padright(100); //thestring = too short = '.NET is cool    '

如果我这样做:

var tmpstr := '=';
tmpstr := tmpstr.PadRight(15); //total length of characters is 15
var swidth := int32(ev.Graphics.Measurestring(tmpstr,new Font('Arial',9)).Width);

thestring := '.NET is cool';
thestring := theString.padright(swidth); //thestring = too long = '.NET is cool   

                '
传递实际角色而非白色空间时,PadRight或PadLeft似乎能正常工作,但我可能错了。

非常感谢任何输入或帮助。

1 个答案:

答案 0 :(得分:1)

使用比例字体时,每个字符宽度之间存在差异。 Arial是一种比例字体,与我们通常使用的大多数字体一样。

Wikipedia: Typeface

  

比例字体包含不同宽度的字形,而a   等宽(非比例或固定宽度)字体使用单一字体   字体中所有字形的标准宽度。

这意味着每封信都可能与之不同。空格确实有宽度,但不一定与字母“i”或字母“w”相同。

实际上有两种选择:

  1. 您可以使用像Courier New这样的等宽字体。这将允许您使用空格根据字母数排列字符。
  2. 使用像素对齐。在这种情况下,您需要测量文本宽度并移动文本输出命令的起始位置,以便项目在彼此之间排列。您实际上计算了所需的空白区域,然后移动到该位置而不是填充字符串。