Bis jetzt wird man nicht viel Spaß an der List-View haben, da die Spalten noch erzeugt werden müssen. Dies gilt übrigens auch dann, wenn man das Control über eine Dialog-Ressource erzeugt. Wir benötigen dazu ein Record vom Typ
lvc.mask := LVCF_TEXT or LVCF_WIDTH;
Uns interessieren hier also Text und Breite. Den Spaltentext geben wir wie folgt an
lvc.pszText := 'Datei';
Fehlt noch die Spaltenbreite
lvc.cx := 200;
Dann können wir die Spalte erzeugen:
SendMessage(hLV,LVM_INSERTCOLUMN,0,LPARAM(@lvc));
Für die zweite Spalte wollen wir die Textausrichtung (rechtsbündig) ändern, was folgende Auswirkung auf die Maske hat:
lvc.mask := lvc.mask or LVCF_FMT;
Also geben wir auch gleich den Wunsch nach rechtsbündigem Text an
lvc.fmt := LVCFMT_RIGHT;
Text und Spaltenbreite werden wie bekannt übergeben:
lvc.pszText := 'Größe'; lvc.cx := 150;
Und damit können wir die zweite Spalte erzeugen:
SendMessage(hLV,LVM_INSERTCOLUMN,1,LPARAM(@lvc));
Die dritte Spalte wird später den Dateityp anzeigen. Da es beim Erzeugen der Spalte nun keine großen Neuheiten mehr gibt, verweise ich Sie an dieser Stelle auf das Beispielprogramm, das den vollständigen Code in der Prozedur "MakeColumns" enthält.
Anstelle der Nachricht "LVM_INSERTCOLUMN" können Sie auch die Funktion " ListView_InsertColumn" benutzen:
ListView_InsertColumn(hLV,1,@lvc);Sicher kennen Sie den optischen Effekt im Explorer von Windows XP, der die gerade aktuelle Spalte grau hinterlegt. Dies ist eine Funktion, die Ihnen das Betriebssystem zur Verfügung stellt; eine aufwändige Programmierung entfällt:

Das setzt natürlich voraus, dass Windows XP läuft und dass Ihre Delphi-Version aktuell genug ist und die benötigte Funktion, "ListView_SetSelectedColumn", kennt. Außerdem benötigt das Programm eine Manifestdatei, damit die Common Controls 6.0 geladen werden können. Diese Datei kennen Sie evtl. schon, wenn Sie das jeweils eingestellte XP-Thema auch für Ihr Programm benutzen wollen. Ob sie dem Programm einfach nur beiliegt ("Dateiname.exe.manifest") oder in den Ressourcen eingebunden ist, spielt dabei keine Rolle. Wichtig ist, dass das Programm darauf zugreifen kann; ansonsten sehen Sie obigen Effekt nicht!
Falls Sie eine ältere Delphi-Version haben, können Sie die Unit "CommCtrl_Fragment.pas" benutzen, die diesem Tutorial beiliegt. Die Unit wurde erfolgreich mit Delphi 5 getestet und enthält ein paar der XP-Aktualisierungen; u.a. auch die o.g. Funktion.
Das Beispielprogramm geht nun wie folgt vor: Beim Start wird die erste Spalte markiert, wobei Sie der Funktion einfach den Index der Spalte (null-basierend) übergeben:
ListView_SetSelectedColumn(hLV,0);
Die gleiche Funktion wird auch bei der Sortierung verwendet. Klicken Sie auf einen Spaltenkopf, werden die Einträge nicht nur sortiert, unter Windows XP wird dann auch die entsprechende Spalte markiert.
Mit der Nachricht "LVM_GESELECTEDCOLUMN" bzw. dem Makro "ListView_GetSelectedColumn" können Sie übrigens die aktuell markierte Spalte ermitteln:
iCol := ListView_GetSelectedColumn(hLV);