Ver Mensaje Individual
  #6  
Antiguo 31-05-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Reputación: 21
gluglu Va por buen camino
Es un poco complicado explicar por qué no me funciona como yo quiero.

Estoy haciendo un gestor de correo electrónico en mi propia aplicación. Recibo correos, y los muestro en un DBGrid. Logro hacer un Multiselect propio ya que el que viene con el propio TDBGrid no me convence para mis preferencias.

Cuando hago un multiselect con Shift - Click del ratón, hago un DisableControls y posterior EnableControls del DBGrid. También guardo el Bookmark en una variable privada. Para que sea funcional el Shift - Click, necesito moverme dentro del DataSet para ver 'primeros' y 'ultimos' registros marcados, para después volver a completar una lista propia (con una numeración propia interna) que me lleva la lista de los registros marcados.

Al recorrer el DataSet, aun con el DisableControls activado, y terminar de llenar mi lista de marcados con los registros correspondientes, intento volverl a la misma e idéntica situación del Grid que había antes del DisableControls. Aun utilizando el Bookmark correspondiente, al final resulta que como no puedo saber cual era el primer registro que se mosrtaba en la primera línea visible del DBGrid, y al volver al registro original mediante el Bookmark correspondiente, el DBGrid al final hace lo que quiere y puede o no subirme o bajarme una o varias líneas de las que originalmente se mostraban.

Efecto desagradable para el usuario. Si pulsa Shift - Click los registros marcados no están donde está el cursor del ratón y es un poco desconcertante.

Solución que pensé, clonar el DataSet, y completar mi lista de seleccionados con los números internos que contenga el DataSet clonado, y de esta manera no mover el puntero de mi DBGrid original, y con un Repaint conseguir el efecto de marcado de todos los registros que habré seleccionado en el DataSet clonado.

Espero haberme explicado correctamente. No sé de qué otra manera hacerlo con el DBGrid propio del Delphi. Descartado utilizar componentes de terceros.

A lo mejor me dais otros consejos diferentes.

Gracias a todos.
__________________
Piensa siempre en positivo !
Responder Con Cita