| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
lucasmontani Cdt

Registrado: 28 May 2009Mensajes: 9
|
Publicado: Jue 06 Mar, 2014 1:50 am Asunto: Stringgrid - detectar la salida del modo edición |
|
|
| 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 |
|
 |
juanma Cmdr

Registrado: 17 Nov 2005Mensajes: 127Ubicación: Almeria - España
|
Publicado: Jue 06 Mar, 2014 1:42 pm Asunto: |
|
|
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 |
|
 |
lucasmontani Cdt

Registrado: 28 May 2009Mensajes: 9
|
Publicado: Vie 07 Mar, 2014 3:55 am Asunto: |
|
|
¡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 |
|
 |
juanma Cmdr

Registrado: 17 Nov 2005Mensajes: 127Ubicación: Almeria - España
|
Publicado: Vie 07 Mar, 2014 3:06 pm Asunto: |
|
|
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 |
|
 |
lucasmontani Cdt

Registrado: 28 May 2009Mensajes: 9
|
Publicado: Sab 08 Mar, 2014 11:21 pm Asunto: |
|
|
| Muchísimas gracias por tu ayuda. |
|
| Volver arriba |
|
 |
|