Hay otro método que quizás te sirva:
Lo primero es definir una función de comparación, tal y como hace la VCL de delphi:
Código Delphi
[-]
type TObjetoComp = function (obj1:Tobjeto; obj2:Tobjeto):integer;
esto viene a decir que eso será una función que recibe 2 objetos y devuelve un número enteronormalmente:
-1 si obj1 < obj2
0 si obj1 = obj2
1 si obj1 = obj2
Ahora se trataría de crear tantas funciones como posibilidades tengas (este es el rollo y puede que sea demasiado... no lo sé):
Código Delphi
[-]
function OrdenaNombreAsc(obj1:Tobjeto; obj2:Tobjeto):integer;
begin
Result := compareText (obj1.nombre, obj2.nombre);
end;
function OrdenaCliente(obj1:Tobjeto; obj2:Tobjeto):integer;
begin
if obj1.idcliente < obj2.idcliente then
Result := -1
else if obj1.idlciente > obj2.idcliente then
Result := 1
else Result := 0;
end;
Estas funciones son muy fáciles de implementar y muy rápido, ahora tu algoritmo de ordenación pregunta al usuario cómo quiere ordenarla y llama a la función concreta:
Código Delphi
[-]
procedure Tobjeto.Sort;
var fun: TobjetoComp;
begin
if OrdenaNombre then
fun := OrdenaNombreAsc
else if ordenaPorCliente then
fun := OrdenaCliente;
while i < listaObjetos.count-2 do
begin
res := fun(listaObjetos[i], listaObjetos[i+1]);
mover_objetos_de_sitio
inc(i);
end;
end;
Así es como funciona el método Sort del TObjectList, y si usas un TObjectList para almacenar tus objetos, sólo necesitas implementar las funciones de ordenación y llamar a ObjectList1.Sort.
Espero te sirva.