Hallo,
in deinem Beitrag #1 hast du die Vergleichsroutine als Methode des Formulars vereinbart. Formal ähnelt sie einer Prozedur, die Methode besitzt jedoch einen unsichtbaren (Self-)Parameter und ist somit nicht kompatibel zu der von CustomSort erwarteten Routine. In meinem Beitrag habe ich die Routine so gezeigt, wie sie benötigt wird - jedenfalls fast, denn die Direktive
stdcall hatte ich vergessen.
Hier sind noch einmal beide Möglichkeiten:
Delphi-Quellcode:
// Vergleichsroutine als Methode des Formulars
function TForm1.CustomSortMethod(Item1, Item2: TListItem; ParamSort: integer): integer; stdcall;
begin
Result := -CompareText(Item1.Caption,Item2.Caption);
end;
// Vergleichsroutine als einfache Prozedur
function CustomSortProc(Item1, Item2: TListItem; ParamSort: integer): integer; stdcall;
begin
Result := -CompareText(Item1.Caption,Item2.Caption);
end;
procedure TForm1.ListView2ColumnClick(Sender: TObject; Column: TListColumn);
begin
ListView1.CustomSort(@CustomSortMethod, 0); // das wird NICHT akzeptiert
ListView1.CustomSort(@CustomSortProc, 0); // das wird akzeptiert
end;
Nur die zweite Form wird vom Compiler akzeptiert.
Gruß Hawkeye