Einzelnen Beitrag anzeigen

Perlsau
(Gast)

n/a Beiträge
 
#34

AW: Sortierte TObjectList - Einträge richtig einfügen

  Alt 21. Sep 2015, 12:05
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;
  Mit Zitat antworten Zitat