Hola,
Y qué culpa tengo yo de que el ejemplo de la ayuda de Delphi tenga una pequeña errata, porque es lo que parece. Ahora, de la ayuda de Delphi este código que sí que compila, o sea, se puede hacer, perfectamente, como se dice en la ayuda.
Código Delphi
[-]
unit Unit1;
interface
uses
Forms, Classes, Controls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
FMiLista: TList;
end;
var
Form1: TForm1;
type
TMiClase = class(TObject)
private
FNombreClase: string;
public
property NombreClase: string
read FNombreClase write FNombreClase;
end;
implementation
{$R *.dfm}
uses
SysUtils, Dialogs;
function CompararNombres(item1, item2: Pointer): integer;
begin
Result := CompareText(TMiClase(item1).NombreClase,
TMiClase(item2).NombreClase);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FMiLista := TList.Create;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FMiLista.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
unaClase, otraClase: TMiClase;
begin
unaClase := TMiClase.Create;
unaClase.NombreClase := 'Zaragoza';
otraClase := TMiClase.Create;
otraClase.NombreClase := 'Abecedario';
FMiLista.Add(unaClase);
FMiLista.Add(otraClase);
FMiLista.Sort(@CompararNombres);
for i := 0 to FMiLista.Count-1 do
begin
ShowMessage( TMiClase(FMiLista.Items[i]).NombreClase );
end;
end;
end.
¿No?
La errata parece estar en el puntero a la función que se pasa como parámetro al método "Sort" de "Tlist":
Código Delphi
[-]
List1.Sort(@CompareText);
Cuando debería ser:
Código Delphi
[-]
List1.Sort(@CompareNames);