如何在Delphi中的ListBox上将文本的最后一点与列正确对齐?

时间:2019-06-17 19:07:34

标签: delphi-10.2-tokyo

我的代码是:

ListTab := IntToStr(92 - Length(ADOqry['Song']));
ListBox.Items.Add(IntToStr(Track) + #9 + ADOqry['Song'] + Format('%' + ListTab + 's', [SongLength]));

我的输出看起来像这样

image

我希望最后一栏显示在00:14下。

1 个答案:

答案 0 :(得分:1)

要执行尝试的操作,必须为ListBox使用等宽字体,以便所有字符都具有相同的宽度,从而可以按照您尝试的方式排列。但是,您没有使用等宽字体,而是实际上使用的是可变宽度字体,因此每个字符都有不同的宽度。这就是为什么事情没有按照您想要的方式排列。

如果您使用的是VCL,则实际上完全不应该使用TListBox来完成此任务。请改用多列TListView。将其ViewStyle属性设置为vsReport,在其Columns属性中添加3列,并根据需要设置其Width,然后可以根据需要用值填充每一列,例如:

var
  Item: TListItem;

Item := ListView.Items.Add;
Item.Caption := IntToStr(Track);
Item.SubItems.Add(ADOqry['Song']);
Item.SubItems.Add(SongLength);

如果您使用的是FMX,则可以使用TListBox以描述的方式显示数据(尽管您确实应该使用TListView)。将ListBox的DefaultItemStyles.ItemStyle属性设置为'listboxitemrightdetail'(或任何显示项目Detail的样式),然后将SongLength字符串存储在TListBoxItem.ItemData.Detail中每个ListBox项的属性:

var
  Item: TListBoxItem;

Item := TListBoxItem.Create(ListBox);
Item.Text := IntToStr(Track) + #9 + ADOqry['Song'];
Item.ItemData.Detail := SongLength;
ListBox.AddObject(Item);

请参阅Embarcadero网站上的以下教程:

Using ListBox Components to Display a Table View