![]() |
AW: Sortierte TObjectList - Einträge richtig einfügen
Zitat:
|
AW: Sortierte TObjectList - Einträge richtig einfügen
Es wird eine Prozedur und keine Methode erwartet
|
AW: Sortierte TObjectList - Einträge richtig einfügen
Zitat:
Delphi-Quellcode:
darf sowohl als auch sein ...
reference to ...
|
AW: Sortierte TObjectList - Einträge richtig einfügen
Zitat:
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; |
AW: Sortierte TObjectList - Einträge richtig einfügen
Man kann zum Sortieren der Liste auch einen Comparer mitgeben
Delphi-Quellcode:
.
TList<T>.Sort( const Comparer: IComparer<T> );
Der interne Comparer der Liste ist eigentlich für die Identität da. So wird dieser z.B. bei
Delphi-Quellcode:
oder
IndexOf
Delphi-Quellcode:
verwendet (unabhängig davon, wie die Liste jetzt sortiert ist).
Contains
|
AW: Sortierte TObjectList - Einträge richtig einfügen
Hatte ich zuvor bereits versucht, allerdings wieder obige Fehlermeldung erhalten, wobei man hier vermutlich den alternativen Comparer nicht als Klassenmethode deklarieren darf. Da ich hier aber weder was einfügen noch IndexOf verwenden muß, bleibe ich vorerst bei meiner zweckentfremdenden Variante :stupid:
Nochmals ganz großen Dank für deine Unterstützung, denn jetzt hab ich immerhin was dazugelernt :thumb: |
AW: Sortierte TObjectList - Einträge richtig einfügen
Doch geht schon ;)
Delphi-Quellcode:
wenn man die Methoden als
unit Unit1;
interface uses Generics.Collections, Generics.Defaults; type TLogFile = class private FFileId : Integer; FFileName: string; public property FileId : Integer read FFileId; property FileName: string read FFileName; public class function IdentityCompare( const L, R: TLogFile ): Integer; static; class function NameCompare( const L, R: TLogFile ): Integer; static; end; TLogFileList = class( TObjectList<TLogFile> ) public constructor Create( AOwnsObjects: Boolean = True ); end; implementation { TLogFile } class function TLogFile.IdentityCompare( const L, R: TLogFile ): Integer; begin Result := TComparer<Integer>.default.Compare( L.FFileId, R.FFileId ); end; class function TLogFile.NameCompare( const L, R: TLogFile ): Integer; begin Result := TComparer<string>.default.Compare( L.FFileName, R.FFileName ); end; { TLogFileList } constructor TLogFileList.Create; begin inherited Create( TComparer<TLogFile>.Construct( TLogFile.IdentityCompare ), AOwnsObjects ); end; end.
Delphi-Quellcode:
markiert ;)
static
Zusätzlich könnte man bei der Klasse auch noch die gewünschten Comparer als
Delphi-Quellcode:
hinterlegen ... kommt halt darauf an :)
class property
|
AW: Sortierte TObjectList - Einträge richtig einfügen
Wenn ich TComparer<*>.Default.Compare an Stellen sehe, wo nur nen String oder Integer verglichen wird, bekomm ich das kalte Grausen.
Und am Ende wird wieder gemeckert, dass der Code langsam wird. |
AW: Sortierte TObjectList - Einträge richtig einfügen
Zitat:
|
AW: Sortierte TObjectList - Einträge richtig einfügen
Möglicherweise
Delphi-Quellcode:
zum Beispiel ?
class function TLogFile.IdentityCompare( const L, R: TLogFile ): Integer;
begin Result := L.FFileId - R.FFileId; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz