Как выровнять последний бит текста по правому краю столбца - в ListBox в Delphi? - PullRequest
0 голосов
/ 17 июня 2019

Код, который у меня есть:

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

Мой вывод выглядел следующим образом

image

Я хотел бы последний столбецтечь под 00: 14.

1 Ответ

1 голос
/ 17 июня 2019

Чтобы сделать то, что вы пытаетесь, вы должны использовать моноширинный шрифт для вашего ListBox, чтобы все символы имели одинаковую ширину и, таким образом, могли быть выстроены в линию так, как вы пытаетесь.Но вы не используете моноширинный шрифт, вместо этого вы фактически используете шрифт переменной ширины, поэтому каждый символ имеет разную ширину.Вот почему все складывается не так, как вы хотите.

Если вы используете VCL, вам действительно не следует вообще использовать TListBox для этой задачи.Вместо этого используйте мультиколонку TListView.Установите для его свойства ViewStyle значение vsReport, добавьте 3 столбца к свойству Columns и установите их Width s по желанию, а затем вы можете заполнить каждый столбец требуемыми значениями, например:

var
  Item: TListItem;

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

Если вы используете вместо этого FMX, вы можете использовать TListBox для отображения данных так, как вы описываете (хотя вам действительно следует использовать TListView вместо этого).Установите для свойства DefaultItemStyles.ItemStyle ListBox значение '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:

Использование компонентов ListBox для отображения представления таблицы

...