Ver Mensaje Individual
  #3  
Antiguo 10-10-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
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.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita