La clasificación de un tlistview por la columna pulsado por el usuario


Cómo ordenar un ListView en orden ascendente o descendente por una columna dada?
Ordenar un TListView por la columna pulsado por el usuario
queremos que el siguiente comportamiento para un ListView:

  • Cuando el usuario hace clic en un encabezado de columna, el ListView deben ser ordenados por la columna

  • El orden inicial debe ser ascendente. Si el usuario hace clic sobre la misma columna, de nuevo, el orden debe ser conmutado. Si el usuario hace clic en otra columna, el orden de la nueva columna debe ser igual a la última columna ordenada.


Para la aplicación necesitamos dos variables para almacenar la última columna pulsado por el usuario y el orden actual:
var
& nbsp & nbsp & nbsp & nbsp LastSortedColumn: integer
& nbsp & nbsp & nbsp & nbsp Ascendente: boolean

podemos inicializar cuando se crea el formulario:
procedure TForm1.FormCreate(Sender: TObject)
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp LastSortedColumn := -1
& nbsp & nbsp & nbsp & nbsp Ascendente := True
& nbsp & nbsp final

En el evento ColumnClick de la ListView se determina el orden y realizar la clase:
procedure TForm1.ListView1ColumnClick(Sender: TObject
& nbsp & nbsp & nbsp & nbsp Columna: TListColumn)
& nbsp & nbsp empezar

& nbsp & nbsp & nbsp & nbsp si la Columna.Índice = LastSortedColumn, a continuación,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Ascendente := no Ascendente
& nbsp & nbsp & nbsp & nbsp else
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp LastSortedColumn := Columna.Índice
& nbsp & nbsp & nbsp & nbsp TListView(Remitente).CustomSort(@SortByColumn, Columna.Índice)
& nbsp & nbsp final

SortByColumn es una función que debe ser declarado previamente y es la función utilizada por CustomSort comparar dos elementos. El valor que se pasa al parámetro de Datos de CustomSort se pasa como parámetro Datos de SortByColumn y la utilizamos para la columna de ordenación:
función SortByColumn(Item1, Item2: TListItem de Datos: entero):
& nbsp & nbsp & nbsp & nbsp entero stdcall
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp si los Datos = 0, entonces
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Resultado := AnsiCompareText(Elemento1.Título, Item2.Título)
& nbsp & nbsp & nbsp & nbsp else
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Resultado := AnsiCompareText(Elemento1.Los puntos[Data-1],
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Item2.Los puntos[Data-1])
& nbsp & nbsp & nbsp & nbsp si no Ascendente, a continuación, Resultado: = Resultado
& nbsp & nbsp final

Usted puede encontrar el código fuente completo de este artículo en el archivo que acompaña a la Pascal Boletín #25









La clasificacion de un tlistview por la columna pulsado por el usuario


La clasificacion de un tlistview por la columna pulsado por el usuario : Multi-millones de consejos para hacer su vida mas facil.


Como ordenar un ListView en orden ascendente o descendente por una columna dada?
Ordenar un TListView por la columna pulsado por el usuario
queremos que el siguiente comportamiento para un ListView:

  • Cuando el usuario hace clic en un encabezado de columna, el ListView deben ser ordenados por la columna

  • El orden inicial debe ser ascendente. Si el usuario hace clic sobre la misma columna, de nuevo, el orden debe ser conmutado. Si el usuario hace clic en otra columna, el orden de la nueva columna debe ser igual a la ultima columna ordenada.


Para la aplicacion necesitamos dos variables para almacenar la ultima columna pulsado por el usuario y el orden actual:
var
& nbsp & nbsp & nbsp & nbsp LastSortedColumn: integer
& nbsp & nbsp & nbsp & nbsp Ascendente: boolean

podemos inicializar cuando se crea el formulario:
procedure TForm1.FormCreate(Sender: TObject)
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp LastSortedColumn := -1
& nbsp & nbsp & nbsp & nbsp Ascendente := True
& nbsp & nbsp final

En el evento ColumnClick de la ListView se determina el orden y realizar la clase:
procedure TForm1.ListView1ColumnClick(Sender: TObject
& nbsp & nbsp & nbsp & nbsp Columna: TListColumn)
& nbsp & nbsp empezar

& nbsp & nbsp & nbsp & nbsp si la Columna.Indice = LastSortedColumn, a continuacion,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Ascendente := no Ascendente
& nbsp & nbsp & nbsp & nbsp else
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp LastSortedColumn := Columna.Indice
& nbsp & nbsp & nbsp & nbsp TListView(Remitente).CustomSort(@SortByColumn, Columna.Indice)
& nbsp & nbsp final

SortByColumn es una funcion que debe ser declarado previamente y es la funcion utilizada por CustomSort comparar dos elementos. El valor que se pasa al parametro de Datos de CustomSort se pasa como parametro Datos de SortByColumn y la utilizamos para la columna de ordenacion:
funcion SortByColumn(Item1, Item2: TListItem de Datos: entero):
& nbsp & nbsp & nbsp & nbsp entero stdcall
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp si los Datos = 0, entonces
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Resultado := AnsiCompareText(Elemento1.Titulo, Item2.Titulo)
& nbsp & nbsp & nbsp & nbsp else
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Resultado := AnsiCompareText(Elemento1.Los puntos[Data-1],
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Item2.Los puntos[Data-1])
& nbsp & nbsp & nbsp & nbsp si no Ascendente, a continuacion, Resultado: = Resultado
& nbsp & nbsp final

Usted puede encontrar el codigo fuente completo de este articulo en el archivo que acompaña a la Pascal Boletin #25


La clasificación de un tlistview por la columna pulsado por el usuario

La clasificación de un tlistview por la columna pulsado por el usuario : Multi-millones de consejos para hacer su vida más fácil.
Recommander aux amis
  • gplus
  • pinterest

Comentario

Dejar un comentario

Clasificación