FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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. |
#2
|
||||
|
||||
¿A nadie se le ocurre nada?.
Solo necesito saber como controlar el manejador interno de tabulación del DBCtrlGrid. Gracias. |
#3
|
||||
|
||||
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; 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. |
#4
|
||||
|
||||
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. |
#5
|
||||
|
||||
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. |
#6
|
||||
|
||||
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. |
#7
|
||||
|
||||
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. |
#8
|
||||
|
||||
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. |
#9
|
||||
|
||||
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. |
#10
|
||||
|
||||
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. |
|
|
|