Cerrar aplicación.


(ame) #1

Buenas tardes,

 

Resulta que estoy haciendo una aplicación que se compone de un formulario de entrada (login) el cual salta nada más arrancar el programa.

Más detalladamente, el proceso es el siguiente:

1.- Se ejecuta el marco AUTOEXEC cuyo formulario principal es FRM_PRINCIPAL y es el formulario que alberga los controles de la aplicación (es la de un TPV, de hecho la interfaz es una adaptación de la Open App vTPV7). Como menú principal, pues tiene asociado un objeto menú que será el menú principal con opciones del tipo "Nuevo artículo", "Nuevo cliente", "Eliminar artículo", etc., aunque este dato creo que es irrelevante.

2.- Dicho marco tiene una conexión a evento que se dispara con la señal "Inicializado".

3.- El código del evento os lo describo en prosa, si necesitáis que suba una captura me lo decís. Pues es algo así como que primero crea un manejador de objeto asociado al formulario de entrada FRM_LOGIN. Posteriormente, como es lógico, lo dispara. Después obtiene el valor de una variable local de FRM_LOGIN que alberga el nivel de acceso del usuario que está identificándose en la aplicación y que se inicializa cuando el usuario pincha sobre uno de los casilleros que muestran los usuarios dados de alta en la aplicación. Por último, cuando obtiene dicho valor, mediante un if-else comprueba si la variable ha sido inicializada o por el contrario mantiene el valor inicial que le asigno por defecto. Y he aquí el kit de la cuestión: si el usuario pincha sobre la "X" de la ventana del formulario FRM_LOGIN, evidentemente no ha pulsado sobre uno de los casilleros y por tanto no ha elegido usuario, así que la variable no estará rellena de valor y tendrá el asignado por defecto. Al recuperar el control el marco AUTOEXEC, o mejor dicho, su evento asociado, necesitaría una instrucción o alguna otra herramienta que haciendo uso de la alternativa if-else, cierre la aplicación si no se ha escogido usuario.

 

Espero que me hayáis entendido.

 

Saludos y gracias.


([N2] overall) #2

Hola Ame,

Se debería poder especificar a un formulario el no presentar la "x" para poderlo cerrar directamente. De igual forma sería muy conveniente tener un EVENTCONECT que controlara el cierre de cualquier formulario, ahora con ESC o con la "x" los cierras todos.

Saludos

OVerall


(ame) #3

Buenas OVerall,

 

1.- ¿Cómo hago para no mostrar la "X"?

2.- ¿Cómo creo dicha conexión a evento? Intenté crear una en FRM_LOGIN con la señal "Drop finalizado", y asociarle el evento el cuál cerrara la aplicación, pero sigo en las mismas, no sé que instrucción debo poner; y por si fuera poco, esta señal parece no hacer caso, pues simplemente puse como código del evento que mostrara un mensaje y cuando pincho en la "X" no aparece ni mensaje ni nada. Supongo que esta señal no sirve para lo que creía que servía.

 

Saludos y gracias.

 

....................................

José Luis Holgado Rodríguez

Responsable del Área de Desarrollo y de Sistemas

AME Consultores S.L.U.


([N2] overall) #4

Que yo sepa no hay ninguna forma de quitar la "x" de cerrar el formulario.

Saludos

Overall


([N2] huntergps) #5

Tambien he tratado de cerrar el aplicativo desde un formulario y al consultar a Velneo me han manifestado que aún no esta implementado.. solo restar esperar..


(ame) #6

Vale, era justo lo que necesitaba saber. Pues a esperar se ha dicho...

Gracias chicos, saludos.

 

............................................

José Luis Holgado Rodríguez

Responsable del Área de Desarrollo y de Sistemas

AME Consultores S.L.U.


(ame) #7

Hola de nuevo,

 

Estaba pensando en el uso de las librerías externas (DLL's) desde Velneo y me vino a la mente usar algunas de las funciones que aportan estas DLL's con el objetivo de poder cerrar nuestra aplicación.

Por ejemplo, la DLL "user32.dll" contiene funciones para el control de la interfaz de las aplicaciones. Hay dos funciones especialmente interesantes para este cometido que son "FindWindow" y "SendMessage". Con la primera podemos obtener el manejador (ID) de la ventana cuyo título sea el que le pasamos por parámetro, es decir, por ejemplo si tenemos abierta la calculadora de Windows, y llamamos a esta función pasándole como parámetro "Calculadora" (que es el título que aparece en la ventana de la aplicación de la calculadora), obtendremos un identificador (asignado por el núcleo del sistema operativo al arrancar cualquier aplicación) correspondiente a la ventana de la aplicación "Calculadora". Si posteriormente ahora le mandamos un mensaje a esa ventana usando "SendMessage" y pasándole como parámetros este ID y uno más para indicarle que se cierre, con ésto podríamos cerrar nuestra aplicación. ¿Cómo lo véis? Al menos que sea un apaño mientras esperamos que esta función se implemente nativamente en Velneo.

Dicho esto, me queda preguntaros como se usan las DLL's en Velneo. He analizado la Open App "v2ExcelWin" y en teoría hago el proceso de crear el objeto adjunto y el de librería externa exactamente igual a como está en la Open App, pero no me funciona, no sé muy bien como usar las DLL's en Velneo.

 

Espero vuestra ayuda. Un saludo.

 

 

............................................

José Luis Holgado Rodríguez

Responsable del Área de Desarrollo y de Sistemas

AME Consultores S.L.U.


([N2] huntergps) #8

Estimado José Luis, ya he probado esa solución y no va.. cree una DLL pero el inconveniente es que tiene que pasar el nombre de la ventana principal y si tienes varios vclient te cierra todos.


([N1] NaNuK) #9

¿Y si usamos kernel32.dll? En esta DLL tenemos una función para obtener el PID del vClient que estamos corriendo, y otra función para matar a ese proceso asociado al vClient.

De este modo, nada más arrancar la aplicación, podemos llamar a este método y lo que nos devuelva almacenarlo en una variable. Una vez guardado este PID, podemos llamar desde cualquier punto del programa a la función de matar el proceso pasándole como parámetro esta variable. Así no hay ambigüedades sobre qué vClient queremos finalizar, ya que los PID's son únicos.

¿Qué opináis?

Por cierto, hablando de DLL's, si son DLL's del sistema, como estas que estamos indicando (user32.dll y kernel32.dll), ¿hace falta también crear el objeto "Fichero adjunto", o ésto es sólo para DLL's creadas por nosotros y que no son del sistema?

 

Saludos.

............................................

José Luis Holgado Rodríguez

desarrollo@ameconsultores.es

Responsable del Área de Desarrollo y de Sistemas

AME Consultores S.L.U.

 

 

 

 


([N2] huntergps) #10

Alguién ha logrado solventar este tema?


(ame) #11

http://velneo.es/foros/topic/salir-del-autexec#post-8598