Gehe ich richtig davon aus, dass du noch keine Erfahrung mit ListView hast?
Zuerst ViewStyle auf vsReport stellen, dann Columns bilden. Geht im Objektinspektor, aber auch zu Laufzeit.
Delphi-Quellcode:
var
NewColumn: TListColumn;
begin
with ListView do
begin
NewColumn := Columns.Add;
NewColumn.Caption := 'Haupt';
NewColumn := Columns.Add;
NewColumn.Caption := 'Sub';
Beachte, dass das du hier etwas verdreht arbeitest, als mit NewColumn := Columns.Add fügst du ein neues Column dazu, mit NewColumn.Caption := 'Haupt' gibst du der Spalte eine Bezeichnung. Diese Art ist einfache. Columns.Add erstellt eine Spalte und die Adresse gibst du an NewColumn weiter. Schon kannst du mithilfe der NewColumn Variable arbeiten. Ist einfacher. Aber das geht auch so
Delphi-Quellcode:
begin
with ListView do
begin
Columns.Add;
Columns[0].Caption := 'Haupt';
Columns.Add;
Columns[1].Caption := 'Sub';
Beides geht, je nachdem was mal lieber hat. Das sind die Spaltenbezeichnungen. Ohne die sieht man die Spalte nicht.
Fast genauso funktioniert es mit den Items
Delphi-Quellcode:
var
ListItem: TListItem;
begin
with ListView do
begin
ListItem := Items.Add;
ListItem.Caption := 'Hauptspalte';
ListItem.SubItems.Add('Subspalte1');
ListItem.SubItems.Add('Subspalte2');
ListItem.SubItems.Add('Subspalte3');
end;
end;
Auch hier kann man direkt zugreifen:
Delphi-Quellcode:
Items.Add;
Items[0].Caption := 'Hauptspalte';
Items[0].SubItems.Add('Subspalte1');
Items[0].SubItems.Add('Subspalte2');
Items[0].SubItems.Add('Subspalte3');
Auf Caption einfach direkt zugreifen, auf Subitems später so:
Delphi-Quellcode:
Items[0].SubItems[0] := 'Subspalte1A';
Items[0].SubItems[1] := 'Subspalte2B';
Items[0].SubItems[2] := 'Subspalte3C';
Fast wie StringGrid, aber nur fast. Und wie überall, man kann auf nichts zugreifen was noch nicht da ist. Also zuerst erstellen und erst dann zugreifen. Vielleicht ist es deshalb besser so zu arbeiten als direkt zuzugreifen.
Delphi-Quellcode:
with ListView do
begin
ListItem := Items.Add;
ListItem.Caption := 'Hauptspalte';
ListItem.SubItems.Add('Subspalte1');
Für den nächsten Item wieder Item.Add eingeben.