Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Stringgrid - detectar la salida del modo edición

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Stringgrid - detectar la salida del modo edición Responder citando

Estimados amigos. Casi todas las dudas que me surgen alguien ya las planteó antes en este foro, pero hoy no encuentro una respuesta a lo que necesito. Tengo un stringgrid con datos que luego guardo en un vector y más tarde en disco. Debo detectar y no sé cómo cuando se sale del modo de edición de una celda para verificar en ese momento si se han hecho cambios en la grilla, comparándola con el vector, e indicar ese estado en una variable de bandera para que el usuario decida después si guardar o no los cambios. Con el evento SetEditText puedo detectar cuando se sale del modo edición, pero también me detecta cuando escribo, aún sin salir del modo edición, y así no me sirve. ¿Alguna idea de solución?. Saludos y gracias de antemano.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Yo he utilizado ese evento pero conjuntamente con la propiedad del stringgrid EditorMode.
Mientras estas editando dicha propiedad es true y cuando has terminado se ejecuta el evento con la propiedad a false.
Creo recordar (ya solo uso el c++builder para mantenimientos) que algunas veces no ejecutaba el evento al finalizar la edición por lo que tenia una variable a nivel de formulario donde al entrar en edición guardaba la fila/columna y en el SelectCell si tenia estos valores daba por finalizada la edición.

Un saludo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

¡Gracias Juanma!. Me fue de gran ayuda lo que me djiste. Tuve que poner algunas verificaciones de columna y fila porque en algunas ocasiones se me repetía el chequeo de cambios. Me quedó algo así y salí del paso. Seguro que se puede mejorar. Saludos.

Variables globales.

Código:

bool     Ban=false;
unsigned ColX,RowX,ColY,RowY;


En evento SelectCell:

Código:

if(Ban)
  if(ACol!=ColX || ARow!=RowX)
    {
      Ban=false;
      ShowMessage("Verificar si hubo cambios desde SelectCell.");
      if(ChequearCambios())
        { ShowMessage("Hubo cambios");
          ActualizarDatos();
        }
    }
ColY=ACol;
RowY=ARow;


En evento SetEditText:

Código:

if(ACol==ColY && ARow==RowY)
Ban=true;

ColX=ACol;
RowX=ARow;

if(!GrillaPRE->EditorMode)
  if(ColY==ACol && RowY==ARow)
    { ShowMessage("Verificar si hubo cambios desde SetEditText.");
      if(ChequearCambios())
         { ShowMessage("Hubo cambios");
           ActualizarDatos();
         }
    }
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Como hoy he recordado algo mas como editaba el grid, he entrado aquí para precisar lo que te comenté ayer.
Veo que no es necesario ya que tu lo has hecho.
Y es que prácticamente las validaciones de datos las realizaba en el SelectCell, conforme el usuario navega por el grid (similar a como tu lo haces) y solo queda validar cuando el usuario sale del stringgrid (pierde el foco) donde se ejecuta el SetEditText con la propiedad EditorMode a false.
Como curiosidad, cuando el usuario estaba en edición si pulsaba ESCAPE, en el keypress yo forzaba a false tanto Ban (en mi caso lEd) como EditorMode.

Un saludo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Muchísimas gracias por tu ayuda.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.