Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Focus en celda de un Grid hasta que.... (https://www.clubdelphi.com/foros/showthread.php?t=79498)

Cabanyaler 12-07-2012 14:00:12

Focus en celda de un Grid hasta que....
 
Hola, no se donde colocar este hilo, si está mal disculpas al administrador.

Quisiera que cuando me coloco en una celda determinada en un grid y escribo un determinado valor, no poder salir de esa casilla donde acabo de escribir si no he pulsado la tecla Intro previamente.

El objetivo es que al modificar una determinada tupla o linea del grid, me interesa hacer recalculos del contenido completo del grid, y estos se ejecutan al evento OnKeyPress del grid cuando la Key es #13, de modo que si el usuario escribe un nuevo valor en una determinada fila columna del grid, si no pulsa Intro, no pueda salir de esa fila, columna.

Muchas gracias de antemano y feliz verano a todos.

Casimiro Notevi 12-07-2012 14:43:40

Cita:

Empezado por Cabanyaler (Mensaje 437195)
Hola, no se donde colocar este hilo, si está mal disculpas al administrador.

De "conexión con base de datos" está claro que no trata :)


A ver si alguien te echa una mano, puede que tengas que cambiar la "lógica" de lo que quieres hacer, porque seguramente tendrás que controlar en el 'onExit' y si se ha pulsado la tecla intro... no sé, lo veo engorroso de esa manera. Puede que sea más cómodo dejar que cambie de registro y en ese momento hacer los cálculos, independientemente de que haya sido con intro, flecha abajo, ratón, etc.

newtron 12-07-2012 19:41:23

Hola.

¿Estamos hablando de un DbGrid o de un StringGrid?

Casimiro Notevi 12-07-2012 20:12:10

Cita:

Empezado por newtron (Mensaje 437238)
¿Estamos hablando de un DbGrid o de un StringGrid?

Buen detalle :)

Cabanyaler 13-07-2012 08:04:28

Es un DBGrid, gracias.
Voy a ir viendo de hacerlo según me indica Casimiro...., sobre todo con la posibilidad de capturar el evento del cambio de tupla, creo que así lo puedo hacer.
Ya cuelgo la solución cuando la tenga.

newtron 13-07-2012 09:21:31

Si lo que quieres es gestionar tipos de campo, longitudes, etc. esto que comentas puede ser una locura. En ese caso yo te recomendaría buscar un DbGrid de terceros que controle todo eso.

ecfisa 13-07-2012 10:22:57

Hola Cabanyaler.

Una forma de detectar si hubo un cambio en algún campo de incumbencia al cambiar de registro puede ser:
Código Delphi [-]
...
implementation

var
  HasChanged: Boolean = False;

...

// Evento asignado a todos los campos que deberían provocan el recalculo
procedure TForm1.DataSetFieldChange(Sender: TField);
begin
  HasChanged:= True;
end;

// Verificar si se produjo un cambio
procedure TForm1.DataSetAfterScroll(DataSet: TDataSet);
begin
  if HasChanged then
  begin
    // Recalcular valores
    ...
  end;
  HasChanged:= False;
end;

...

Saludos.

Cabanyaler 18-07-2012 11:08:17

Si gracias a todos, el ejemplo que he seguido es el de ecfisa, aunque en mi código no me ha gustado del todo el resultado demasiado, además es cierto que para controlar todos los movimientos es un poco caos, por ejemplo a la hora de salir del grid con un movimiento de ratón en lugar de pulsando cualquier tecla.
En definitiva lo dejado sin control, de modo que el usuario deba por iniciativa prpia pulsar el intro para validar el valor del grid.
Quizá en software de terceros esto esté más facil de implementar o quizá en la versión DX2E, pero eso será más adelante.
Muchas gracias de nuevo a todos, un saludo y feliz verano (o invierno al cono sur). ;)


La franja horaria es GMT +2. Ahora son las 09:16:38.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi