Es wird eine Prozedur und keine Methode erwartet
So hatte ich die Fehlermeldung eigentlich auch erst verstanden. Doch auch eine Auslagerung der Compare-Function aus der Klasse hat nichts gebracht, Sir Rufo's Lösung dagegen schon: Jetzt funktioniert meine Sortierung auch mit der Methode Compare. Der Klasse hab ich noch eine Public-Variable SortId spendiert, die beim Klick auf das jeweilige Titelfeld des Stringgrids gesetzt wird. Damit reduziert sich meine Sortierung auf drei Zeilen in der aufrufenden Klasse:
Delphi-Quellcode:
Function TFileListe.Compare(Const Item1, Item2 : TLogFiles) : Integer;
begin
Case SortId Of
0 : Result := TComparer<Integer>.Default.Compare(Item1.FileId, Item2.FileId);
1 : Result := TComparer<String>.Default.Compare(Item1.FileName, Item2.FileName);
2 : Result := TComparer<String>.Default.Compare(Item1.FileType, Item2.FileType);
3 : Result := TComparer<Int64>.Default.Compare(Item1.FileSize, Item2.FileSize);
4 : Result := TComparer<TDateTime>.Default.Compare(Item1.FileDate, Item2.FileDate);
5 : Result := TComparer<Boolean>.Default.Compare(Item1.FileDown, Item2.FileDown);
End;
end;
Procedure TServerLogFiles.GridMouseUp(Grid: TJvStringGrid; Btn: TMouseButton; x, y: Integer);
Var
Spalte,
Zeile : Longint;
Saved : Boolean;
DbDatum : TDateTime;
DbSize : Int64;
i : Integer;
begin
Grid.MouseToCell(x, y, Spalte, Zeile);
i := Zeile -1;
If Btn = mbLeft Then
Begin
If Zeile = 0 Then
Begin // Sortierung
FileList.SortId := Spalte;
FileList.Sort;
GetFileListInGrid(Grid);
End;
If (Zeile > 0) And (Spalte = 5) Then
Begin // Down-Markierung
DbSize := DatMod.View_DownFiles.FieldByName('DATEISIZE').AsInteger;
DbDatum := DatMod.View_DownFiles.FieldByName('DATEIDATUM').AsDateTime;
Saved := DatMod.View_DownFiles.Locate('DATEI;DATEITYP',
VarArrayOf([FileList[i].FileName, FileList[i].FileType]),[]);
If Saved Then
Begin
Grid.Hint := 'Size: ' + GLD.IntToStrPunkte(DbSize) + ' / Datum: ' + DateTimeToStr(DbDatum);
Grid.ShowHint := True;
End Else
Begin
Grid.Hint := '';
Grid.ShowHint := False;
End;
FileList[i].FileDown := Not FileList[i].FileDown;
GetFileListInGrid(Grid);
End;
End;
end;