Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-05-2003
Avatar de javiermorales
javiermorales javiermorales is offline
Miembro
 
Registrado: may 2003
Ubicación: Alicante
Posts: 272
Poder: 22
javiermorales Va por buen camino
Controlar Tab en DBCtrlGrid

Buenos Días, ¿alguien sabe como controlar la tabulación de un DBCtrlGrid?.

Me explico, por razones del cliente, no quiere que se navege entre los registros utilizando el DBNavigator. Por lo tanto utilizo los eventos OnKeyPress del Form y OnKeyDown de los DBCrlGrid, para simular todos los botones del DBNavigator. Todo funciona bien, salvo en el caso de moverse entre los controles de un DBCtrlGrid utilizando el ENTER y de cambiar de DBCtrlGrid utilizando otra tecla.

Lo que he llegado a conseguir es que al pulsar ENTER, anulo la pulsación y la sustituyo por TAB.

En resumen, necesito controlar que con una determianda pulsación, se mueva entre los controles de un DBCtrlGrid y con otra, cambie de DBCtrlGrid, quedando seleccionado el primer control en el orden de tabulación del DBCtrlGrid, ya que por ahora lo que pasa es que al cambiar de DBCtrlGrid se me selecciona el DBCtrlGrid y no el primer control de dicho contenedor.

Muchas Gracias.
Responder Con Cita
  #2  
Antiguo 03-06-2003
Avatar de javiermorales
javiermorales javiermorales is offline
Miembro
 
Registrado: may 2003
Ubicación: Alicante
Posts: 272
Poder: 22
javiermorales Va por buen camino
¿A nadie se le ocurre nada?.

Solo necesito saber como controlar el manejador interno de tabulación del DBCtrlGrid.

Gracias.
Responder Con Cita
  #3  
Antiguo 03-06-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Código:
procedure TForm1.DBCtrlGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if Key = vk_Return then
 begin
 //Si pulsan enter bajamos al siguiente control
 DBCtrlGrid1.DoKey(GkDown);
 end;
end;
Estos son los códigos:

gkNull Do nothing.
gkEditMode Toggle the EditMode property.
gkPriorTab Move to the previous panel.
gkNextTab Move to the next panel.
gkLeft Move one panel to the left.
gkRight Move one panel to the right.
gkUp Move one panel up.
gkDown Move one panel down.
gkScrollUp Move one panel up.
gkScrollDown Move one panel down.
gkPageUp Move ColCount * RowCount records up in the dataset.
gkPageDown Move ColCount * RowCount records down in the dataset.
gkHome Move to the first record in the dataset.
gkEnd Move to the last record in the dataset.
gkInsert Insert a new record prior to the current record in the dataset and set EditMode to True.
gkAppend Insert a new record at the end of the dataset and set EditMode to True.
gkDelete Delete the current record from the dataset and set EditMode to False.
gkCancel Cancel any edits not written to the dataset and set EditMode to False.


Un Saludo.
Responder Con Cita
  #4  
Antiguo 04-06-2003
Avatar de javiermorales
javiermorales javiermorales is offline
Miembro
 
Registrado: may 2003
Ubicación: Alicante
Posts: 272
Poder: 22
javiermorales Va por buen camino
Muchas Gracias Marcos, le había echado un vistazo a esos códigos, pero pensaba que el "gkDown", realizaba un movimiento al siguiente DBCtrlGrid (una estupidez, suponiendo que lo normal es que exista un solo DBCtrlGrid).

Gracias de nuevo, voy a probarlo.
Responder Con Cita
  #5  
Antiguo 06-06-2003
Avatar de javiermorales
javiermorales javiermorales is offline
Miembro
 
Registrado: may 2003
Ubicación: Alicante
Posts: 272
Poder: 22
javiermorales Va por buen camino
Hola Marcos, ya lo he probado. La utilización de:

"DBCtrlGrid1.DoKey(GkDown);"

provoca que el foco se desplace al mismo control en el que nos encontramos, pero del siguiente registro.

Si se te ocurre cualquier otra cosa, se agradecerá. Un saludo.
Responder Con Cita
  #6  
Antiguo 06-06-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Javier, no veo exactamente que es lo que quieres hacer, explícate un poco más a ver si encuentro respuesta a lo que pides.

Un Saludo.
Responder Con Cita
  #7  
Antiguo 09-06-2003
Avatar de javiermorales
javiermorales javiermorales is offline
Miembro
 
Registrado: may 2003
Ubicación: Alicante
Posts: 272
Poder: 22
javiermorales Va por buen camino
Se trata de al pulsar "Enter", pasar al siguiente control del DBCtrlGrid.

Si se utiliza el "KeyPress" o el "KeyDown" del Form, controla cualquier control, menos el DBCtrlGrid, que utiliza su propio handler de tabulación. La pregunta es: ¿Como puedo controlar el paso al siguiente control del DBCtrlGrid?.

Gracias.
Responder Con Cita
  #8  
Antiguo 09-06-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Creo que no me has entendido bien o al reves, en cualquier caso yo no me refiero al evento del Form sino del DbCtrGrid.

Es decir el evento KeyDown del DbrCrtGrid es donde debes de colocar el código que te indique.

Si ya lo has hecho así no te entendido bien y en ese caso, si te pido que me expliques mas a fondo el asunto.

Un Saludo.
Responder Con Cita
  #9  
Antiguo 10-06-2003
Avatar de javiermorales
javiermorales javiermorales is offline
Miembro
 
Registrado: may 2003
Ubicación: Alicante
Posts: 272
Poder: 22
javiermorales Va por buen camino
Hola Marcos, sí que utilizo el "KeyDown" del DBCtrlGrid. Te adjunto el código que utilizo. en fichero adjunto.

procedure TPartyDesc.DBCtrlGrid2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
inherited;
......
if (Key=VK_RETURN) then //Simulación de Tab (Enter)
begin
Key:=VK_TAB;
DBCtrlGrid2.DoKey(gkNull);
Exit;
end;
......
end;

Como ves, cuando se presiona Enter, lo sustituyo por Tab y funciona, pero no puedo controlar su respuesta, ya que si utilizo "DBCtrlGrid1.DoKey(GkDown)", el foco pasa al mismo control, pero del siguiente registro.

La pregunta está en como controlar el paso al siguiente control del DBCtrlGrid, de una forma similar a como se hace en los forms (Perform (WM_NEXTDLGCTL,0,0)) o en los DBgrids (TDBGrid(ActiveControl).selectedindex).

Gracias.
Responder Con Cita
  #10  
Antiguo 10-06-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Pues a mí me funciona, si pongo dos campos en el DbCtrGrid, entonces hay dos controles:
Supongamos: nombre , apellidos
al pulsar enter, me pasa de nombre a apellidos y su pulso enter de nuevo me pasa a la siguiente celdilla del DbCtrlGrid campo nombre y después apellidos

??????

Un Saludo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:06:45.


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
Copyright 1996-2007 Club Delphi