Bonjour,

Je cherche à moderniser et à supprimer du vieux code plus maintenu par du code standard concernant les Generics.

Voici le code de base :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
uses
  Classes, SysUtils, uutlGenerics,Windows;
 
type
  TDirectoryNode = class;
  TDirectoryRootInfo = class;
 
  TDirectoryNodeList = class(specialize TutlList<TDirectoryNode>) 
  public
    procedure SortRecursive(aComparer: IComparer; const aReverse: boolean);
  end;
 
  TDirNodeSortBySize = class(TInterfacedObject, TDirectoryNodeList.IComparer)
  public
    function EqualityCompare(constref i1, i2: TDirectoryNode): boolean;
    function Compare(constref i1, i2: TDirectoryNode): integer;
  end;
J'ai cherché à le remplacer par ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
uses
  Classes, SysUtils, Generics.Defaults, Generics.collections, Windows;
 
type
  TDirectoryNode = class;
  TDirectoryRootInfo = class;
 
  TDirectoryNodeList = class(specialize TList<TDirectoryNode>)
  public
    procedure SortRecursive(aComparer: IComparer; const aReverse: boolean);
  end;
 
  TDirNodeSortBySize = class(TInterfacedObject, TDirectoryNodeList.IComparer)
  public
    function EqualityCompare(constref i1, i2: TDirectoryNode): boolean;
    function Compare(constref i1, i2: TDirectoryNode): integer;
  end;
uutlGenerics provient des paquets, pas facile à trouver : bitSpaceControls et bitSpaceUtils...

Sauf que mon Lazarus râle sur les ICOMPARER, et j'avoue je suis bien loin de maîtriser les generics couplés à une interface...

Une idée de ce qui me manque pour résoudre le problème ?

Merci d'avance de votre aide.