![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
No, porque entonces estarías pasando al método Sort el resultado de comparar dos objetos en específico. El parámetro de Sort es una función (no el resultado de una función). Pasar funciones o procedimientos como parámetros se usa desde el pascal estándar.
Necesitaría ver el código exacto que estás usando para ver porqué el compilador te marca ese error. // Saludos |
|
#2
|
|||
|
|||
|
Entiendo roman, es clara tu explicación y mala mi interpretación previa.
Haber si con parte del código se logra detectar el error. En una unidad (UPersona) declaro un objeto persona de la siguiente forma: Código:
TPersona = class
private
documento: Integer;
nombre: String;
public
(* Constructores *)
Constructor Create(doc: Integer; nom: String);
(* Selectoras *)
Function GetDocumento: Integer;
Function GetNombre: String;
(* Modificadoras *)
Procedure SetDocumento(doc: Integer);
Procedure SetNombre(nom: String);
end;
implementation
...
end.
Primero declaro las variables Código:
var Form1: TForm1; p: TPersona; listaPersonas: TObjectList; Código:
procedure TForm1.Button1Click(Sender: TObject); begin p:=TPersona.Create(StrToInt(Edit1.Text),Edit2.Text); listaPersonas:=TObjectList.Create(True); // Agregamos el objeto persona a la lista listaPersonas.Add(p); Edit1.Text:=''; Edit2.Text:=''; end; Ahora el segundo botón: Código:
procedure TForm1.Button2Click(Sender: TObject);
function OrdenarPorDocumento(a: Pointer;b: Pointer): Integer;
begin
if TPersona(a).GetDocumento > TPersona(b).GetDocumento then
result:=-1
else
if TPersona(a).GetDocumento < TPersona(b).GetDocumento then
result:=1
else
result:=0;
end;
begin
ListaPersonas.Sort(OrdenarPorDocumento);
end;
Desde ya muy agredecido por cualquier comentario. Saludos. |
|
#3
|
||||
|
||||
|
Así, a bote pronto, lo único que se me ocurre es que declares la función OrdenarPorDocumento fuera del evento Button2Click. Es posible que los procedimientos locales no se puedan pasar como parámetros. Nunca lo he intentado.
// Saludos |
|
#4
|
|||
|
|||
|
Gracias roman por tu orientación.
Veré si puedo solucionar el problema. Saludos. |
|
#5
|
||||
|
||||
|
Desempolvando los algoritmos de inserción binaria, podemos hacer una rutina que inserte los objetos en orden:
Por ejemplo, puedes definir la función comparadora:
al momento de insertar:
// Saludos |
|
#6
|
|||
|
|||
|
Excelente roman. Personalmente yo usaba búsqueda e inserción binaria en Pascal estándar con arreglos (listas estáticas), pero no con listas dinámicas (listas enlazadas). El hecho de tener en TObjectList un campo que indiza cada nodo facilita mucho las cosas.
Por otro lado, el inconveniente que tenia con la función comparadora lo solucioné con el llamado Código:
Lista.Sort(@ComparaClientes); Código:
Lista.Sort(ComparaClientes); Saludos. |
|
#7
|
||||
|
||||
|
Otra opción que a veces utilizo yo y que resulta más rápida de implementar, aunque es posible que no tan eficiente, cuando se requiere algo similar a lo que planteas (objetos + campo de ordenación) es utilizar un TStringList.
Utilizo el campo como String (para definir la ordenación) y los objetos se almacenan en la propiedad Objects. Sólo se puede utilizar si la conversión del campo se puede hacer a un string y la ordenación de este tipo es la correcta para el resultado esperado.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#8
|
||||
|
||||
|
Cita:
// Saludos |
|
#9
|
||||
|
||||
|
Hola.
Hice unas pruebas y si la función pasada como argumento está fuera del procedimiento/función (que es como la he usado anteriormente) se la puede llamar:
Ahora, enviando como argumento la dirección de la función como menciona sebamawa, y figura en el ejemplo de la ayuda de Delphi: la llamada trabaja tanto si la función es anidada como si es externa. También es muy interesante tu enfoque Neftali ![]() Saludos. ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| adotable ordenado por un campo | leorene | Conexión con bases de datos | 2 | 13-02-2007 01:00:16 |
| Select ordenado por un campo pero localizado por otro | ingel | SQL | 2 | 04-01-2006 17:33:23 |
| Imprimir el listado ordenado por un campo | ilichhernandez | Impresión | 3 | 03-11-2005 19:44:13 |
| DBLookupComboBox ordenado | Supermagayin | Conexión con bases de datos | 2 | 12-04-2005 00:18:33 |
| Grid ordenado al añadir registro | Tomás | Varios | 0 | 13-03-2004 14:58:02 |
|