Delphi TLabel标题中制表符的行为是否已定义?

Delphi TLabel标题中制表符的行为是否已定义?,delphi,caption,control-characters,tlabel,Delphi,Caption,Control Characters,Tlabel,如果我将制表符放入字符串中,然后从字符串中指定标签的标题属性,制表符会做什么 CR字符导致返回,这对于显示多行标题很有用。制表符看起来确实执行了某种制表操作——我想知道这种行为是定义的还是可预测的。 (我猜行为是由Windows而不是Delphi决定的)。如果将制表符放在TLabel.Caption中,则Caption包含制表符 选项卡字符的显示方式取决于您使用的字体和窗口本身。例如,在Win7上使用XE进行快速测试时,会显示适合制表符的间距(大约8个空格,采用非比例字体) 这是我的测试。在表单

如果我将制表符放入字符串中,然后从字符串中指定标签的标题属性,制表符会做什么

CR字符导致返回,这对于显示多行标题很有用。制表符看起来确实执行了某种制表操作——我想知道这种行为是定义的还是可预测的。
(我猜行为是由Windows而不是Delphi决定的)。

如果将制表符放在
TLabel.Caption
中,则
Caption
包含制表符

选项卡字符的显示方式取决于您使用的字体和窗口本身。例如,在Win7上使用XE进行快速测试时,会显示适合制表符的间距(大约8个空格,采用非比例字体)

这是我的测试。在表单上放置三个标签,并将其添加到表单的OnCreate事件中:

procedure TForm1.FormCreate(Sender: TObject);
begin
  Label2.Left := Label1.Left;
  Label3.Left := Label2.Left;
  Label1.Caption := 'Some text'#9'Some text'#9'More text';
  Label2.Caption := Label1.Caption;
  Label3.Caption := Label1.Caption;
end;
以下是输出:


如果将制表符放在
TLabel.Caption
中,则
Caption
包含制表符

选项卡字符的显示方式取决于您使用的字体和窗口本身。例如,在Win7上使用XE进行快速测试时,会显示适合制表符的间距(大约8个空格,采用非比例字体)

这是我的测试。在表单上放置三个标签,并将其添加到表单的OnCreate事件中:

procedure TForm1.FormCreate(Sender: TObject);
begin
  Label2.Left := Label1.Left;
  Label3.Left := Label2.Left;
  Label1.Caption := 'Some text'#9'Some text'#9'More text';
  Label2.Caption := Label1.Caption;
  Label3.Caption := Label1.Caption;
end;
以下是输出:


我猜它们会扩展到8个空间。:-)TCustomLabel.Paint最终使用DT_EXPANDTABS集调用DrawText()(除非使用除epNone以外的省略号位置),因此是的,这是由Windows决定的我猜它们会扩展到8个空格。:-)TCustomLabel.Paint最终使用DT_EXPANDTABS集调用DrawText()(除非使用除epNone之外的省略号位置),因此是的,它由windowsThreak@Ken确定。我的测试还表明,对于比例字体,它的行为也相对合理,但如果我想让第2列中的内容都有合理的制表符,我需要在第1列中用空格填充字符串,使它们的宽度大致相同,否则项目将跳回上一个制表符位置(或者我想您可以使用Canvas.TextWidth)谢谢@Ken。我的测试还表明,对于比例字体,它的行为也相对合理,但如果我想让第2列中的内容都有合理的制表符,我需要在第1列中用空格填充字符串,使它们的宽度大致相同,否则项目将跳回上一个制表符位置(或者我想您可以使用Canvas.TextWidth)