Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Tecla Suprimir (https://www.clubdelphi.com/foros/showthread.php?t=14291)

javiermorales 15-09-2004 20:58:01

Tecla Suprimir
 
Hola a todos/as. En un form tengo un DBCtrlGrid y tengo en el evento OnKeyDown el siguiente código:
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

Cita:

Empezado por javiermorales
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:
Código:

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

Cita:

Empezado por javiermorales
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

Cita:

Empezado por javiermorales
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.


La franja horaria es GMT +2. Ahora son las 07:27:23.

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