Возми TListBox (там легко свою отрисовку делать, но это на будущее).
Сделай свой класс, например:
Код:
type
TPlayListItem = class
private
FTitle : String;
FAuthor : String;
FFileName : String;
public
constructor Create(AFileName : String); virtual;
property Title : String read FTitle;
property Author : String read FAuthor;
property FileName : String read FFileName;
end;
constructor TPlayListItem.Create(AFileName : String); virtual;
begin
inherited;
FFileName := AFileName;
// здесь заполняются остальные свойства, типа название и автор.
end
Внутри программы, когда добавляешь треки в список, создаешь экземпляр вышеописанного класса и добавлешь в ListBox с помощью AddObject:
Код:
procedure TForm1.AddFile(AFileName : String);
var
APlayListItem : TPlayListItem;
begin
APlayList := TPlayList.Create(AFileName);
ListBox1.Items.AddObject('',APlayListItem);
end;
Добавляется с пустым капшеном, т.к. в последствии это нам все-равно не надо.
А вот теперь в ListBox'е за счет ручной отрисовки в зависимости от какого-либо параметра выводишь то, что надо из соответсвующего прицепленого к итему класса:
Код:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
AItem : TPlayListItem;
ABuf : String;
begin
AItem := ListBox1.Items.Objects[Index];
Case PlayListMode Of
1 : ABuf := ExtractFileName(AItem.FileName); // имя файла
2 : ABuf := AItem.Title; // название трека
3 : ABuf := AItem.Author + ' - ' + AItem.Title; // автор и название трека
End;
Control.Canvas.TextOut(Rect.Left,Rect.Top,ABuf);
end;
ЗЫ. Не забудь соотв. стиль у листбокса поставить.
ЗЗЫ. Здесь простейшая отрисовка без учета состояния позиции и всяких других извращений. Дальше сам копай.