Estoy intentando controlar las teclas “Insert” y “Suprimir” a través de una rejilla, pero solo las puedo controlar si quito de los Formularios de alta y de baja sus respectivos formularios relacionados.
Lo quiero porque quiero obligar al usuario a pulsar los botones de Alta y Baja, y no las teclas, de “Insert” y “Suprimir” (caso especial).
¿Existe la posibilidad de que las teclas “Insert” y “Suprimir” no se ejecuten, aunque estén relacionados sus respectivos formularios?
La solución que comenta Gonzalo solo funciona para Rejillas editables que no es tu caso.
Lo de las teclas Supr e Insert es otra de las muchas aberraciones que tiene el framework de Velneo. Cuando has asociado los formularios de Alta y Eliminación las teclas Insert y Supr estarán secuestradas por la Rejilla sin posibilidad de personalizarlo por parte del programador. Como digo, una aberración, consecuencia de la alta Asistencia en el diseño y muchas veces mal entendido “Life is Soft”.
Como otras muchas veces, tendrás que recurrir a las chapuzas para saltarte estas absurdas limitaciones en el Diseño de tu Aplicación.
Te propongo algo para que hagas pruebas
Tu formulario principal con la Rejilla tendrá un botón <Añadir> que llama a un Manejador de evento con el siguiente código:
Rem (Establecemos un marcador que indique al formulario de Edición que se ha pulsado el Botón
Set (LBOTON, 1)
Interfaz: Formulario de alta ( GRD_REJILLA, LOK)
Rem (Una vez ejecutado el PRE_INI del formulario de edición reseteamos el marcador LBOTON
Set (LBOTON, 0)
En el formulario de Edición del registro tendrás que leer en el evento PRE_INI el valor de la variable local LBOTON y actuar en consecuencia
If (#ID=0)
Rem (Comprobamos el marcador LBOTON que valdrá 1 solo cuando se ha pulsado el botón <Añadir>
Interfaz: Ejecutar manejador de evento (VER_SI_BOTON_JS, LOK)
If (LBOTON = 0)
Set retorno proceso = NO
Finalizar proceso
El manejador de evento de javascript que comprueba el valor de la variable local LBOTON puede ser de la siguiente manera:
var oVista = theMainWindow.currentView();
var oForm = oVista.centralWidget();
// Comprobamos que oForm es realmente un Formulario (type = 18)
if (oForm.objectInfo().type() == 18) {
theRoot.setVar("LBOTON", oForm.root().varToBool("LBOTON"))
}
Impresionante Paco, con tu ayuda he podido controlar las teclas de Añadir, Suprimir y ademas el doble Click que se hace cuando un usuario quiere modificar un formulario.
Para ello solo he tenido que adaptar tu código al formulario que deseaba controlar:
Interfaz: Formulario de alta …
Interfaz: Formulario de modificación …
Interfaz: Formulario de baja …
Y luego en el PRE_INIT solo hace falta controlar si es una Alta, Modificación o Suprimir.
Quedo a tus pies, Paco, muchas gracias por tu estimable ayuda, a ver cuando puedo coincidir para pagar unas rondas, vamos es lo mínimo.
PD: Como ahora ya no se hacen los encuentros “Life is soft” que antes Velneo organizaba para sus Usuarios, sera un poco más difical.
Impresionante Paco, con tu ayuda he podido controlar las teclas de Añadir, Suprimir y ademas el doble Click que se hace cuando un usuario quiere modificar un formulario.
Para ello solo he tenido que adaptar tu código al formulario que deseaba controlar:
Interfaz: Formulario de alta …
Interfaz: Formulario de modificación …
Interfaz: Formulario de baja …
Y luego en el PRE_INIT solo hace falta controlar si es una Alta, Modificación o Suprimir.
Quedo a tus pies, Paco, muchas gracias por tu estimable ayuda, a ver cuando puedo coincidir para pagar unas rondas, vamos es lo mínimo.
PD: Como ahora ya no se hacen los encuentros “Life is soft” que antes Velneo organizaba para sus Usuarios, sera un poco más difícil.
Hola, estoy buscando solucionar lo mismo, antes de aplicar la solución indicada por Paco quisiera preguntar ¿En nuevas versiones ya se tiene una mejor opción para solucionar esto o seguimos en lo mismo?
En la versión 30 podemos ejecutar un formulario desde un Proceso con "Crear manejador … " y elegir cómo mostrarlo, como Ventana modal que era lo de antes o en modo Vista que es la nueva forma.
Sin embargo, es difícil emular el comportamiento nativo del comando Interfaz: Formulario de alta (Rejilla).
Por lo tanto, creo que lo mejor es seguir usando las propiedades de la Rejilla para los formularios de edición del registro seleccionado (teclas Ins, Enter, Supr) y usar la “chapucilla” mostrada en este hilo.