我的代码是:
ListTab := IntToStr(92 - Length(ADOqry['Song']));
ListBox.Items.Add(IntToStr(Track) + #9 + ADOqry['Song'] + Format('%' + ListTab + 's', [SongLength]));
我的输出看起来像这样
我希望最后一栏显示在00:14下。
答案 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网站上的以下教程: