Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-03-2004
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 21
jplj Va por buen camino
Ordenar un TListBox

¿Cómo puedo ordenar (de menor a mayor numéricamenete hablando y de una forma sencilla) un TListBox que se llena con cadenas que representan números positivos y negativos?

Gracias de antemano.
Responder Con Cita
  #2  
Antiguo 29-03-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
la propiedad sorted a true no te sirve?
Responder Con Cita
  #3  
Antiguo 29-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por cadetill
la propiedad sorted a true no te sirve?
No le servirá ya que, por ejemplo, las cadenas "10", "11", "12" las colocará antes de las cadenas "2", "3", "4", etc.

// Saludos
Responder Con Cita
  #4  
Antiguo 29-03-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
Empezado por roman
No le servirá ya que, por ejemplo, las cadenas "10", "11", "12" las colocará antes de las cadenas "2", "3", "4", etc.

// Saludos
Cierto, no leí de que eran números
Responder Con Cita
  #5  
Antiguo 29-03-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
Wop!

Pues a mi la manera más sencilla que se me ocurre es cargar la lista en un vector de enteros, ordenar el vector y depues recargar la lista.
__________________
E pur si muove
Responder Con Cita
  #6  
Antiguo 29-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Es increíble pero realmente no parece haber manera de hacerlo con el mismo ListBox no quedando más remedio que utilizar algo externo como indica marto. Para facilitar un poco las cosas y no tener que implementar uno mismo el algoritmo de ordenación puede usarse esta técnica que me encontré en una búsqueda por la red:

1. Asignar los elementos de ListBox1.Items a un StringList
2. Usar el método CustomSort del StringList
3. Devolver los elementos al ListBox

Quedaría algo así:

Código:
function CompareNumbers(List: TStringList; Index1, Index2: Integer): Integer;
var
  Number1, Number2: Integer;

begin
  Number1 := StrToInt(List[Index1]);
  Number2 := StrToInt(List[Index2]);

  if Number1 < Number2 then
    Result := -1
  else if Number1 = Number2 then
    Result := 0
  else
    Result := 1;
end;

procedure SortList(ListBox: TListBox);
var
  List: TStringList;

begin
  List := TStringList.Create;

  try
    List.AddStrings(ListBox.Items);
    List.CustomSort(CompareNumbers);

    ListBox.Clear;
    ListBox.Items.AddStrings(List);
  finally
    List.Free;
  end;
end;
// Saludos
Responder Con Cita
  #7  
Antiguo 29-03-2004
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 21
jplj Va por buen camino
Muchas Gracias por vuestras respuesta.
Responder Con Cita
  #8  
Antiguo 29-03-2004
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 21
jplj Va por buen camino
Funciona perfectamente, pero hay que cambiar:

List.CustomSort(CompareNumbers);
por
List.CustomSort(@CompareNumbers);

Muestra (Delphi 7) el aviso de código inseguro al compilar: pero no vamos a pasarlo a .NET.

Saludos.

P.D.: Para los despitados como yo una nota: TListBox.Sorted:= False;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:18:55.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi