Ver Mensaje Individual
  #3  
Antiguo 26-02-2009
Bauhaus1975 Bauhaus1975 is offline
Miembro
 
Registrado: may 2005
Ubicación: Málaga
Posts: 135
Reputación: 20
Bauhaus1975 Va por buen camino
Hola Roman, gracias por tu respuesta.

Por cierto, he visto que había un post igual al mío después de publicar. Y tú mismo lo habías respondido, pero se detalla usar TObjectList (no sé si me trae algún beneficio).

Bueno, voy al grano. Tengo algunas dudas todavía, sin duda es falta de práctica con el lenguaje.

De momento intento hacer esto:
Código Delphi [-]
type
    TItem = record // NOTA: he cambiado el tipo de item a TItem
                campo1 : double;
                campo2 : double;
            end;
    TLista = TLIST; // nótese el cambio de tipo
var
    lista : TLista; 
begin
 
// Así creamos la lista:
lista := TList.Create;
 
// Así añadimos elementos
lista.Add(item); // Siendo item una variable de tipo 'TItem'
 
// Así ordenamos por campo 1, gracias a las funciones debajo definidas
list.Sort(@compararCampo1);
 
// Así ordenamos por campo 2, gracias a las funciones debajo definidas
list.Sort(@compararCampo2);
 
// Aquí definimos las funciones de ordenación (una por cada campo que necesite ser ordenado)
 
function compararCampo1(Item1, Item2: Pointer): Integer;
begin
  if TItem(Item1).campo1 > TItem(Item2).campo1 then
    result := 1
  else if TItem(Item1).campo1 < TItem(Item2).campo1 then
    result := -1
  else
    result := 0;
end;
// y la otra para ordenar por campo2
function compararCampo2(Item1, Item2: Pointer): Integer;
begin
  if TItem(Item1).campo2 > TItem(Item2).campo2 then
    result := 1
  else if TItem(Item1).campo2 < TItem(Item2).campo2 then
    result := -1
  else
    result := 0;
end;

¿Voy bien encaminado?
Ahora bien, para acceder a los datos tengo problemas con el 'Cast' de tipos, trato de hacer:

Código Delphi [-]
item := TItem(lista.Items[i]);
// Obteniendo el error de 'invalid typecast'

y no consigo evitar el error...
Responder Con Cita