PDA

Ver la Versión Completa : Mover columnas de un ListView por codigo


abracadabra
30-10-2007, 17:14:40
Hola amigos.
Quisiera saber si existe alguna forma de modificar el orden de las columnas de un listview.


Ejemplo
Sea un ListView que tiene columnas en el siguiente orden:
ColumnaA|ColumnaB|ColumnaC

Como puedo hacer para que el orden sea el siguiente:
ColumnaB|ColumnaC|ColumnaA


Gracias de antemano.

abracadabra
05-11-2007, 20:35:28
Hola gente!!!!
Finalmente encontré la solución al problema.
Para mover columnas es necesario hacer una llamada al mensaje LVM_SETCOLUMNORDERARRAY, el codigo es el siguiente:

SendMessage(ListView1.Handle,LVM_SETCOLUMNORDERARRAY,numcols,lparam(@arregloCols));
ListView1.Invalidate

donde numcols representa el número de columnas que tiene el control listview.
arregloCols: Es un arreglo que contiene los índices de las columnas en el orden que se desea establecer.
Al final se hace un ListView1.Invalidate para que repinte el control ya que si no se hace esto se observa que lo único que cambia es el orden de las columnas en el header pero no de toda la lista.

Ejm:
Sea el ListView con las siguientes columnas
columna0|columna1|columna2|columna3|columna4|

Pero se quiere que el orden sea
columna4|columna2|columna0|columna1|columna3|

Entonces lo primera que hacemos es crear un arreglo con el orden que se quiere establecer es decir:
arregloCols = [4,2,0,1,3]
(Este arreglo se crea con las declaraciones e instruccioens utilizada para el manejo de arreglos)

finalmente se ejecutan las líneas de código especificadas lineas arriba:

SendMessage(ListView1.Handle,LVM_SETCOLUMNORDERARRAY,5,lparam(@arregloCols));
ListView1.Invalidate;

dec
05-11-2007, 20:49:18
Hola,

Buen apunte abracadabra. En su momento y, tratando de echarte una mano, me puse a ello, y, bueno, a la vista está que no di pie con bola. Pero, bueno es saber lo que dices ahora. Muchas gracias por compartir la solución que encontraste. :)

abracadabra
06-11-2007, 23:56:32
Hola,

Buen apunte abracadabra. En su momento y, tratando de echarte una mano, me puse a ello, y, bueno, a la vista está que no di pie con bola. Pero, bueno es saber lo que dices ahora. Muchas gracias por compartir la solución que encontraste. :)

:o ....
No hay nada que agradecer dec, muchas veces el club me ha sacado de apuros ayudandome a resolver problemas. Solo espero que esta solución pueda servir a alguien en un futuro.
Saludos.

ixMike
08-11-2007, 13:48:51
:o ....
No hay nada que agradecer dec, muchas veces el club me ha sacado de apuros ayudandome a resolver problemas. Solo espero que esta solución pueda servir a alguien en un futuro.
Saludos.


De momento me sirve a mí :D

Muchas gracias (por cierto, con "arreglos" de refieres a vectores/matrices [arrays], ¿no?)

abracadabra
10-11-2007, 20:28:55
De momento me sirve a mí :D

Muchas gracias (por cierto, con "arreglos" de refieres a vectores/matrices [arrays], ¿no?)

Asi es ixMike. :)
Cuando hablo de arreglos me refiero a estructuras arrays. En este caso en particular serán arreglos de enteros.

Ejm:
//Primero se declara el tipo
ArrayInt = array [1..5] of integer;
(es este caso la dimensión es de 5, por que el listview que dí en el ejemplo tiene 5 columnas)

//Luego declaras una variable (en este caso arregloCols) del tipo declarado.
arregloCols: ArrayInt;

Luego haces las operaciones y asignaciones necesarias para que el contenido de dicho arreglo (arregloCols) contengan los índices ordenados de tal manera que represente el orden de las columnas que deseas establecer. Así como se muestra en el ejemplo que dí hace días.

Saludos.