Ver Mensaje Individual
  #4  
Antiguo 25-09-2008
mefixxto mefixxto is offline
Miembro
 
Registrado: may 2008
Posts: 46
Reputación: 0
mefixxto Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Me parece que no va a ser tan fácil como usar Sorted porque el ordenamiento se hace como texto y no como números. Eso implica, por ejemplo, que '10' va antes que '2' a pesar de que 2 es menor que 10.

Se me ocurre usar un TStringList auxiliar y su método CustomSort:

Código Delphi [-]{ Compara dos valores de una lista La función devuelve: -1 si List[Index1] es menor que List[Index2] 0 si List[Index1] es igual a List[Index2] 1 si List[Index1] es mayor que List[Index2] Si alguno de los elementos no es un número entero, la función lanza una excepción. } function CompareNumbers(List: TStringList; Index1, Index2: Integer): Integer; var N1, N2: Integer; begin if TryStrToInt(List[Index1], N1) and TryStrToInt(List[Index2], N2) then if N1 < N2 then Result := -1 else if N1 = N2 then Result := 0 else Result := 1 else raise Exception.Create('La lista contiene valores incorrectos'); end; procedure TForm1.Button1Click(Sender: TObject); var SL: TStringList; begin SL := TStringList.Create; try // Pasamos los elementos del ListBox a SL SL.AddStrings(ListBox1.Items); // Ordenamos usando la función de arriba para comparar elementos SL.CustomSort(CompareNumbers); // Regresamos los elementos al ListBox ListBox1.Items := SL; finally SL.Free end; end;


// Saludos
Muchas gracias me sirvo de mucho.-
Responder Con Cita