- ViewStyle = vsReport sein // im OI einstellen
- ColumnClick = true // im OI einstellen
- SortType = stData // im OI einstellen
- *.h
private:
int ColumnToSort;
bool bSortASC;
// im Konstruktor der Form Variablen initialisieren
void __fastcall TfrmMain::TfrmMain()
{
ColumnToSort = 1; // 1. zu sortierende Spalte, z.B. Name
bSortASC = true; // ASC sortieren
}
// OnColumnCompare Methode des LV, wird nur ausgeführt, wenn SortType == stData
void __fastcall TfrmMain::lvWindowsCompare(TObject *Sender, TListItem *Item1, TListItem *Item2, int Data, int &Compare)
{
switch (ColumnToSort)
{
// Spalte 1 beinhaltet beispielsweise Strings
case 0 : { Compare = bSortASC ? AnsiCompareStr(Item1->Caption, Item2->Caption) : -AnsiCompareStr(Item1->Caption, Item2->Caption);
break; }
// Spalte 2 ist beispielsweise mit Zahlen gefüllt und würde mit AnsiCompareStr() falsch sortiert, daher Hilfsfunktion IntCompare (s.u.)
case 1 : { Compare = bSortASC ? IntCompare(Item1->SubItems->Strings[ColumnToSort - 1].ToInt(), Item2->SubItems->Strings[ColumnToSort - 1].ToInt()) : -IntCompare(Item1->SubItems->Strings[ColumnToSort - 1].ToInt(), Item2->SubItems->Strings[ColumnToSort - 1].ToInt());
break; }
// restl. Spalten (-> 2) mit Subitems sind wieder mit Strings gefüllt
default : { Compare = bSortASC ? AnsiCompareStr(Item1->SubItems->Strings[ColumnToSort - 1], Item2->SubItems->Strings[ColumnToSort - 1]) : -AnsiCompareStr(Item1->SubItems->Strings[ColumnToSort - 1], Item2->SubItems->Strings[ColumnToSort - 1]); }
}
}
// OnColumnClick Methode des LV
void __fastcall TfrmMain::lvWindowsColumnClick(TObject *Sender, TListColumn *Column)
{
if (ColumnToSort == Column->Index)
{
bSortASC = !bSortASC; // Sortorder ASC/DESC durch Klicken auf den Header umschalten
}
else
{
bSortASC = true; // am Anfang oder bei Klicken auf eine andere Spalte immer true setzen
}
ColumnToSort = Column->Index; // geklickte Spalte merken
lvWindows->AlphaSort(); // LV sortieren
}
// Hilfsfunktion zum Vergleich zweier int-Werte
int __fastcall TfrmMain::IntCompare(int i1, int i2)
{
return i1 == i2 ? 0 : i1 < i2 ? -1 : 1;
}