Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Mover columnas en tiempo real msflexgrid

284 views
Skip to first unread message

Jimmy

unread,
Oct 10, 2008, 7:43:00 PM10/10/08
to
Que tal buen dia a todos antes que nada muchas gracias por tomarse un
poco de su tiempo en leer mi problema soy nuevo les cuento acabo te
terminar un sistema en vb6 estoy usando msflexgrid pero tengo la
necesidad de que necesito poder mover las columnas de un msflexgrid en
tiempo real no se si esto sea posible de ante mano muchas gracias y
saludos .

Leonardo Azpurua

unread,
Oct 10, 2008, 9:06:31 PM10/10/08
to

"Jimmy" <jasz...@gmail.com> escribió en el mensaje
news:2f656ec6-a32a-43cd...@y71g2000hsa.googlegroups.com...

Hola, Jimmy:

Sería bonito que existiera un tiempo imaginario: volvería a tener veinte
años y tendría la oportunidad de volver a vivir sin cometer los mismos
errores. Imagino que dices tiempo de ejecución.

Hay controles de terceros que te permiten mover las columnas en tiempo de
ejecución. Pero si tienes que hacerlo en el FlexGrid hay que hacerlo a mano.

Lo primero es definir la estrategia:

Cuando el usuario mueve el mouse sobre la cuadricula con
el botón izquierdo pulsado (MouseMove con Button And 1 = 1):
[Necesitamos un flag para que todos los componentes de la
forma sepan que estamos moviendo una columna:
Private moviendoColumna As Boolean]
[necesitamos tambien un lugar donde almacenar la columna
que vamos a reubicar:
Private columnaOrigen As Integer]
Si moviendoColumna = False:
- moviendoColumna = True
- Creamos un indicador VISUAL (puede ser una linea vertical)
para indicar donde vamos a soltar la columna.
Movemos el indicador a la columna más cercana.
Si el usuario mueve el mouse fuera de la cuadricula:
moviendoColumna = False
Ocultar el indicador visual.
* como ves, el indicador de desplazamiento de columnas se muestra
cuando moviendoColumna = True. Podríamos implementar
moviendoColumna como una propiedad que además determina la visibilidad
del indicador visual..
* Para impedir que el mouse "salga" de la cuadrícula, puedes llamar a una
función del API llamada SetClippingRegion (o algo parecido) que encierra
al mouse dentro de un rectángulo.

Cuando el usuario suelta el botón del mouse sobre la cuadrícula:
Si moviendoColumna entonces:
Si la Grid.MouseCol <> columnaOrigen:
MoverColumna columnaOrigen, Grid.MouseCol
moviendoColumna = False

Ahora comienzan los bemoles: ¿qué contiene el grid?

Si contiene un Recordset, cada vez que muevas una columna, deberás reordenar
los campos de la consulta de su origen de datos, obtener un nuevo recordset
y asignarlo a la propiedad DataSource o como se llame del grid. Y acceder a
los valores mediante las columnas del recordset subyacente.

Si contiene datos "libres", de todas maneras necesitarás hacer algo con
ellos despues. Para acceder a los datos de una columna en particular,
deberás tener un "mapa" de las columnas. Este mapa es una lista que
inicialmente tiene parejas iguales (1, 1), (2, 2), (3, 3), indicando que la
columna de contenido 1 se encuentra en la columna física uno. Pero si mueves
la columna 3 a la primera posición, entonces tendras (1, 2), (2, 3), (3, 1).

Por último, debes mover los datos celda por celda, fila por fila, las
propiedades de ancho de columna, etcétera.

Suena divertido :-)


Salud!


0 new messages