Ver la Versión Completa : Tecla Suprimir
javiermorales
15-09-2004, 20:58:01
Hola a todos/as. En un form tengo un DBCtrlGrid y tengo en el evento OnKeyDown el siguiente código:
procedure TObras.DBCtrlGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
//Pulsacion de Borrar Registro (Suprimir)
if (Key=VK_DELETE) then
begin
DBCtrlGrid1.DoKey(gkNull);
Key := 0;
if not (DataSource2.State in [dsInsert,dsEdit]) and not (DataSource2.DataSet.Eof) then
if (Application.MessageBox('¿Seguro que desea borrar el registro?',
'Sistema de Gestión de Constructoras',mb_yesno+mb_IconInformation)=idyes) then
begin
DataSource2.DataSet.Delete;
DataSource2.DataSet.Refresh;
DBEdit8.SetFocus;
end;
Exit;
end;
end;
El problema está en que además ejecuta la funcionalidad normal de la tecla Suprimir, aunque como veis no tengo "inherited" y a la tecla le asigno el valor 0.
Por favor, alguna idea.
defcon1_es
16-09-2004, 12:16:31
El problema está en que además ejecuta la funcionalidad normal de la tecla Suprimir,
aunque como veis no tengo "inherited" y a la tecla le asigno el valor 0.
Hola,
aunque no tengas puesto "inherited",
si se ejecuta el código heredado (si no fuera así, pobres de nosotros :eek:,
no funcionaría la herencia!!)
Pero, viendo el código fuente del tDBCtrlGrid en la VCL:
VK_DELETE: if GetKeyState(VK_CONTROL) < 0 then GridKey := gkDelete;
se me ocurre un truco, pon esta línea en tu código: Shift := Shift+[ssCtrl];
PD: El procedimiento Include(Shift, ssCtrl) es más eficiente
que la asignación Shift := Shift+[ssCtrl]; según la ayuda de Delphi.
Salu2.
javiermorales
16-09-2004, 12:25:04
Gracias por la ayuda defcon1_es. Lo pruebo esta tarde y te comento.
Un saludo.
javiermorales
16-09-2004, 21:53:45
Hola defcon1_es, lo he probado y continua haciendo lo mismo.
En realidad la asignación que me propones evitaría la ejecución, pero la asignación de Key a cero o a VK_NONAME también debería evitar la ejecución y no lo hace.
Si se te ocurre cualquier otra cosa, por favor, házmelo saber.
PD: Se acepta cualquier sugerencia.
Gracias.
javiermorales
20-09-2004, 20:51:16
¿No hay forma de evitar que se ejecute la funcionalidad de la tecla "suprimir"?.
De verdad que no me lo creo. Algo debe haber.
Por favor, cualquier ides será bien recibida.
PD: Utilizar la tecla "suprimir" para borrar un registro es un requerimiento del usuario que no puedo evitar.
roman
20-09-2004, 21:05:02
El problema está en que además ejecuta la funcionalidad normal de la tecla Suprimir
Me gustaría saber cuál es esa funcionalidad normal de la que hablas pues yo coloco un DbCtrlGrid, oprimo "Suprimir" y no pasa nada. Claro está que si el foco está en un control editable como un DBEdit entonces la tecla seguirá suprimiendo el caracter bajo el cursor pero esto no lo puedes evitar con el mismo OnKeyDown del DBCtrlGrid sino con el del correpondiente DBEdit.
// Saludos
javiermorales
20-09-2004, 21:17:42
Gracias por responder. Efectivamente el problema aparece si nos encontramos dentro de un control editable.
Pero si la solución está en el control editable, ¿como puedo, de manera genérica, desactivar la funcionalidad de la tecla "suprimir" en todos los controles editables del DBCtrlGrid?.
Gracias. Un saludo.
roman
20-09-2004, 21:22:45
Pero si la solución está en el control editable, ¿como puedo, de manera genérica, desactivar la funcionalidad de la tecla "suprimir" en todos los controles editables del DBCtrlGrid?.
Pues una opción rápida sería asignar un mismo evento OnKeyDown a todos estos controles y anular ahí la tecla VK_DELETE. Desde luego no está de más que preguntes a tu cliente de qué forma espera que sus capturistas puedan borrar caracteres mientras escriben datos en uno de esos controles. (Quizá no esté al tanto que puede borrar el registro con Ctrl-Suprimir)
// Saludos
javiermorales
20-09-2004, 21:29:24
Muchas Gracias Roman. Haré la asignación que me indicas y te contaré como ha ido.
Respecto a la utilización de ctrl+suprimir, se lo comenté, pero es mas caprichoso que un "metrosexual" en un centro comercial. Se ha emperrado en que sea solo con la tecla "suprimir" y punto.
En fin paciencia con los clientes, que al fin son los que pagan.
Gracias de nuevo. Te contaré.
javiermorales
20-09-2004, 21:45:33
Roman. Funciona perfectamente. Gracias.
vBulletin v3.6.8, Derechos ©2000-2013, Jelsoft Enterprises Ltd.