BLOG

Manejando eventos en un formulario

Por [N4] fgutierrez.velneo el | 31 Comments

El evento es un subobjeto contenedor de intrucciones, similar a un proceso, que podemos ejecutar asociado a una señal configurada en una conexión de evento, o desde un botón.

Las conexiones de evento permiten configurar una señal asociada al formulario o a un control. Cuando la señal se dispare forzará la ejecución del evento. Ejemplos de señales son un timer, que se ejecuta cada cierto tiempo, una ganancia de foco, un doble clic en una rejilla o casillero, una pulsación de botón, etc.

Los eventos disponen de un grupo de comandos especifico que puede acceder al objeto desde donde se dispara denominado Comandos de interfaz. Estos comandos de interfaz nos permiten acceder a la gestión del foco, recalcular controles, acceder a la lista de registros que tiene un control o modificar las propiedades de color o fuente del control.

Realizaremos un ejemplo sencillo: al pulsar el botón aceptar comprobaremos si el usuario ha introducido una valor en el campo nombre y, si no es así, mostraremos un mensaje. A continuación posicionaremos el foco en el control que el usuario ha de rellenar.

El primer paso ha de ser crear el evento que dispararemos. Para ello, una vez dentro del formulario, hemos de pulsar el botón  de la barra de herramientas  . Haciendo doble clic sobre el objeto creado abriremos el editor de instrucciones que nos permite programar el evento al igual que los procesos.

Comenzaremos comprobando si el campo NAME tiene valor usando la función isEmpty(). Si no es así mostraremos un mensaje de error indicando al usuario cuál es la tarea que ha de realizar. Una vez que acepte, usamos el comando de Interfaz: Activar foco objeto para que el control correspondiente gane el foco para permitir al usuario que complete el campo.

Por último, hemos de crear la conexión de evento que definirá el disparo de la señal. Para ello, de nuevo dentro del formulario, debemos pulsar el botón  de la barra de herramientas. El siguiente paso será completar las propiedades de este subobjeto: definiremos qué control será el que dispare la señal, en este caso el botón Aceptar, cuál será la señal que dispare, en este caso la ganancia de foco del control y, por último, qué evento se disparará, que será el que acabamos de crear.

Velneo es el entorno ágil para el desarrollo
de aplicaciones empresariales

DESCARGAR VELNEO

31 Responses to "Manejando eventos en un formulario"
  1. fjpnovo dice:

    Buenos dias:

    Entendido. Los eventos y las señales van a dar mucho juego en v7.

    Un saludo,

    Fran.

  2. ricardoriobo dice:

    Es perfecto, ayer haciendo pruebas me sorprendieron mucho los eventos y los slots.

    Hay algo que no encuentro, y es donde crear una variable global pero sin estar asociada a ningun objeto.

    Saludos

  3. eic dice:

    ¡Qué buena pinta!

    Saludos,

    Fran Varona

  4. agonzalez dice:

    Hola Ricardo:

    Es perfecto, ayer haciendo pruebas me sorprendieron mucho los eventos y los slots.

    Hay algo que no encuentro, y es donde crear una variable global pero sin estar asociada a ningún objeto

    Las variables globales, aun están desactivadas. Te recomiendo que utilices las variables locales a los eventos, de momento. La circunstancia de que aun no esten operativas las globales, nos ayudará a acostumbrarnos a utilizar este tipo de variables nuevas y muy potentes.

    Muchas gracias a todos por vuestros comentarios.

    Edito el mensaje y completo

    Para poder realizar desarrollos en los que necesites variables globales imprescindiblemente, puedes utilizar la técnica de una tabla parámetros con un único registro en el que cada campo equivale a una variable global. En el resto de tablas crearemos un campo puntero a tabla parametros y donde todas tienen de contenido inicial 1 en dicho campo.

    Actualmente hay muchos desarrolladores que prefieren utilizar esta técnica de manera que a la hora de resolver en una búsqueda, por ejemplo los limites inicial y final de un campo fecha, toman el contenido de los campos que debemos definir en esta tabla leyéndolos a través del puntero a la tabla parámetros. Por supuesto el registro de la tabla será el origen del formulario de búsqueda para solicitar información al usuario, puestos en el caso de realizar la búsqueda entre fechas del ejemplo que estoy comentando.

    Espero haberme explicado con claridad en el ejemplo y técnica de uso de la tabla parámetros, de lo contrario comentadlo que tratare de exponerlo más clara y detalladamente.

    Saludos.

  5. salvador dice:

    Hola:

    Perdonar que introduzca un comentario que no tiene que ver con el tema del mensaje pero queria consultar y hacer un comentario sobre el driver odbc.

    Antes que nada tambien decir que me ha gustado mucho lo que he visto, sobretodo me encanta que se hayan introducido los eventos (que entiendo se tiraban de menos). He disfrutando viendo las novedades y si Dios quiere y me deja un poco de tiempo acabaré tambien velneando jeje 😉

    Lo primero que hice fue definir un par de tablas para intentar conectarme a la base de datos desde mi herramienta habitual (delphi 2007) y tan solo he podido obtener la conexión para los componentes obsoletos del Borland Database Engine (BDE). Es decir, a traves de un componente conexion del BDE. Lo he intentado a traves del driver de ADO que porta Microsoft y me da problemas la cadena de conexión (En delphi ya conocemos la excepción un tanto peliculera “Se ha producido un error catastrofico…”). Tambien he hecho pruebas desde Delphi .NET y ADO a través de ODBC y no he obtenido resultados.

    Alguien me puede dar un tip de la cadena de conexión para revisarla o si es necesario algun parametro adicional en la conexión.

    Aclaro: El driver funciona ya que pruebas el test y da correcto desde la ventana de configuración de los datos de conexión. Pero el controlador que trae por ejemplo Microsoft presenta problemas con este driver desde el entorno de Delphi (Proveedor MSDASQL.1).

    Resumiendo. No he podido conectar con la base de datos desde los componentes ADO de Delphi para ODBC aunque si he podido acceder al catalogo de base de datos, prueba de que ha existido conexión, según entiendo.

    A ver si alguien comenta algo.

    Gracias.

    Salvador Jover

  6. salvador dice:

    Hola a todos,

    Queria ampliar mi comentario actual sobre el odbc y el problema que relataba.

    Tras hacer un debug linea por linea de codigo, he visto que la libreria que rompe o que causa la excepcion es la msvcr80.dll, que es una libreria que segun parece va asociada a Microsoft Visual Studio y es participe en la conexión a traves del ODBC que usa velneo.

    Investigando un poco he visto a traves de algunos link pongo de ejemplo (http://support.microsoft.com/kb/245500/es) causa la excepción cuando en la cadena de conexión existe alguna propiedad que no maneja el driver por lo que me imagino que algunas de las propiedades definidas en la cadena de conexión al ODBC sea la que produzca el error.

    ¿Podría chequear con vosotros la cadena de conexión?

    Se que este tema parece un poco trivial desde el punto de vista del desarrollador de Velneo y os pido perdon si os distraigo un poco de todas las novedades que nos trae el entorno pero a mi me parece importante atraer a otros desarrolladores hacia velneo y creo que la clave está en la conectividad y que vean que no existe una ruptura al migrar a Velneo. Ese es al menos mi esfuerzo desde que me uni al mundo de Velneo.

  7. juan_figueroa dice:

    Seguramente nadie más contento que yo con la preeminencia que ahora en la V7 se le está dando al uso de las variables locales de los objetos en detrimento de las globales, una vieja aspiración mía para Velneo. Me recuerda cuando la versión 5.0 de Clipper introdujo su sistema de variables locales a las funciones, algo que resultó en una potencia de programación magnífica. La recomendación de los expertos era “programar las funciones usando variables locales (cargadas desde parámetros) siempre que sea posible” en sustitución del amplio uso que se hacía entonces de variables globales. Muchos empezamos a modificar nuestro código es esta dirección, con resultados probados excelentes.

    Ahora en V7, sin poder usa rtemporalmente variables globales se nos invita a ejercitarnos en el uso de las locales a los objetos. De acuerdo, nos pondremos a ello con el mismo espíritu que lo hicimos en Clipper.

    Pero, para cuando no sea posible presciendir de las variables globales nos aconseja Alejandro la creación de una tabla de parámetros mono registro enlazada a todas la tablas como maestro, técnica que usan algunos buenos programadores en V6x. Aunque yo objetaría a la técnica que se propone , sin tener experiencia ciertamente, que todos los parámetros (simulando variables globales) serán visibles desde todos los clientes y tendrán valores iguales para todos ellos.

    Quizá habría que introducir una tabla en memoria, copiada la inicial de parámetros, para que los registros ahora tengan valores particulares para cada cliente.

    No sé, como solución temporal (¿hasta febrero?) vale, pero me parece un poco ortopédica.

    Si los buenos programadores en V6x prefieren la simulación de variables globales mediante campos de una tabla, con todo su enredo, será porque tiene alguna ventaja. Entonces, lo que sería aconsejable sería que las nuevas variables globales de V7 imitaran las propiedades y ventajas que se buscan con la simulación.

    Pregunta:¿cómo serán las nueva varibles globales?

  8. salvador dice:

    Hola a todos:

    Creo que he descubierto finalmente el origen del problema de la conexión del ODBC y si es así creo que no estaría de mas tenerlo en cuenta al menos para advertirlo.

    Tras algunas pruebas y tras analizar las distintas partes de la cadena de conexión he visto que la propiedad que se le atraganta es:

    Initial Catalog=[aqui el nombre de la base de datos]

    Quizas al resto de compañeros no han tenido el problema porque el proveedor de conexión ha omitido es par valor y por eso ha funcionado correctamente. Darle un vistazo si quereis para confirmarlo. El proveedor “Microsoft OLEDB Provider for ODBC” contiene en su configurador un selector del catalogo inicial y si se escoge (que es lo que cualquier usuario normalmente elegiría) es cuando da el problema.

    Un saludo,

    Salvador Jover

  9. agonzalez dice:

    Hola Juan,

    Indicarte que la solución de usar un registro de una tabla parámetros, como sustitutivo de las variables globales, es solo temporal. Pronto estarán disponibles y cada programador podrá usar el método que desee y más se ajuste a sus necesidades.

    Seguramente te sorprenderán las variables globales, de momento ya existen las locales a los objetos y el tipo de variable Array.

    Saludos y muchas gracias por tus comentarios.

  10. fgutierrez dice:

    Hola a todos:

    Creo que he descubierto finalmente el origen del problema de la conexión del ODBC y si es así creo que no estaría de mas tenerlo en cuenta al menos para advertirlo.

    Tras algunas pruebas y tras analizar las distintas partes de la cadena de conexión he visto que la propiedad que se le atraganta es:

    Initial Catalog=[aqui el nombre de la base de datos]

    Quizas al resto de compañeros no han tenido el problema porque el proveedor de conexión ha omitido es par valor y por eso ha funcionado correctamente. Darle un vistazo si quereis para confirmarlo. El proveedor “Microsoft OLEDB Provider for ODBC” contiene en su configurador un selector del catalogo inicial y si se escoge (que es lo que cualquier usuario normalmente elegiría) es cuando da el problema.

    Un saludo,

    Salvador Jover

    Estimado Salvador:

    La cadena de conexión no tiene implementado el parámetro Catalog, ya que no entra dentro de las especificaciones del driver. Sin embargo, no debería darte fallo, si no que debería devolverte un mensaje de error. Comentas que rompe o causa excepción. ¿Es así o es un mensaje de error del driver? Si no es un mensaje de error del driver, envíanos por favor una captura y la traza del driver para poder depurarlo.

    Para que no tengas problemas con la conexión, constrúyela únicamente con los elementos que puedes configurar en el panel de configuración del driver, ya que son éstos y no otros los que admite el driver en su conexión.

    Gracias por tu colaboración y un saludo.

  11. salvador dice:

    Hola:

    Ahora mismo no estoy en casa y no te lo puedo ver con detenimiento para hacerte una captura, pero yo entiendo que es una excepción y tan pronto como tenga un rato os preparo una captura del error y os remito un link o bien te la envio por correo.

    Y entiendo que es así porque en el caso de la ventana del proveedor donde se configura el driver, la excepcion es tratada a través del mensaje “Ha ocurrido un error catastrofico”, que por cierto no se quien sería el listo que se le ocurriria el mensajito.

    Pero una vez que actuas a través del entorno de programación y ejecutas el procedimiento open de apertura de conexión y se invocan las rutinas, se observa la excepcion que comentaba en la libreria msvcr80.dll. Logicamente tuve que incluir en el debug las fuentes que forman parte de la conexion para visualizar la excepción y hacer puntos de parada.

    En el caso de Windows Vista, el problema llegaba hasta el punto de bloquear el entorno y tener que resetearlo y abortar el proceso. Quizas porque exista algun tipo de semaforo que o señal que espere el ok de la conexión y al no recibirse se produce algun tipo de bloqueo y el proceso deja de responder.

    Pero bueno… eso son simplemente suposiciones. En el xp no llegaba a bloquearse el entorno cuando se producia la excepcion.

    Verifiqué que sin el problema este, entonces funciona bien y hace correctamente la conexión y quisiera esta semana comprobar como se comporta simulando un desarrollo muy simple de altas/bajas/modificaciones.

    Un saludo,

    Salvador Jover

  12. ramon dice:

    Se esta hablando de las variables globales, creo que podria ser una buena idea, que estas podrian estar asociadas a las caracteristicas de un campo de una tabla. Dicho de otra manera, generalmente las variables sirven para guardar valores de campos de tablas entre otras funciones, de tal manera que si cambias la capacidad del campo tienes que modificar la capacidad de todas las variables que pueden guardar ese campo. En algun lenguaje, las variables pueden ir asociadas a campos.

    Muchas Gracias

  13. mivimu dice:

    quizá no he entendido bien la conexión de evento pero, creo que puesto que hay que asignarla a un control a lo mejor seria mas sencillo que en las propiedades del control apareciera SEÑAL y SLOT

    con lo que no seria necesaria la Conexion de eventos.

    Saludos.

  14. fgutierrez dice:

    quizá no he entendido bien la conexión de evento pero, creo que puesto que hay que asignarla a un control a lo mejor seria mas sencillo que en las propiedades del control apareciera SEÑAL y SLOT

    con lo que no seria necesaria la Conexion de eventos.

    Saludos.

    Mivimu – 22-Oct-2008 # 20:07:07 – P:3

    Tal y como lo tienes ahora te permite reaprovechar un evento para varias señales. Date cuenta que si tuvieras que realizar un mismo control, por ejemplo, al ganar o perder foco, si sólo tuvieras el evento habrías de duplicarlo, es decir, duplicar código y mantener ambos eventos cuando haya modificaciones.

    De la forma que está ahora, en caso de tener que hacer una modificación, únicamente has de mantener un evento y si lo necesitas en más sitios puedes reaprovecharlo simplemente con crear una nueva conexión de evento.

  15. overall dice:

    Hola,

    – Tengo un problema con el ejemplo que exponéis. Siguiendo los pasos todo es correcto y funciona bien, pero cuando estás en el formulario y le das a enter, no reconoce la conexión al evento, se la salta a la torera.

    Aparte de lo comentado, como se puede hacer para que al pulsar enter salte de un control a otro?

    Saludos, Luis

  16. fgutierrez dice:

    Hola,

    – Tengo un problema con el ejemplo que exponéis. Siguiendo los pasos todo es correcto y funciona bien, pero cuando estás en el formulario y le das a enter, no reconoce la conexión al evento, se la salta a la torera.

    Aparte de lo comentado, como se puede hacer para que al pulsar enter salte de un control a otro?

    Saludos, Luis

    Overall – 23-Oct-2008 # 19:50:25 – P:3

    ¿Qué quiere decir que no reconoce la conexión al evento? Para hacer que al pulsar salte de un control a otro basta que cambies el foco por ejemplo cuando lo pierda el botón.

  17. overall dice:

    Hola Fgutierrez,

    Tengo un formulario con el botón Aceptar (Comando “Aceptar”), en el formulario tengo una conexión a evento sobre el control Aceptar que al ganar foco dispara el slot AL_ACEPTAR. Pues bien, si yo, con el ratón hago click en aceptar o paso mediante tabulador, funciona, pero si estoy en cualquier campo y le doy a la tecla ENTER, no me hace nada de nada, no funciona. No se puede desactivar la opción que ENTER te acepte el formulario?

    Saludos

  18. fgutierrez dice:

    Hola Fgutierrez,

    Tengo un formulario con el botón Aceptar (Comando “Aceptar”), en el formulario tengo una conexión a evento sobre el control Aceptar que al ganar foco dispara el slot AL_ACEPTAR. Pues bien, si yo, con el ratón hago click en aceptar o paso mediante tabulador, funciona, pero si estoy en cualquier campo y le doy a la tecla ENTER, no me hace nada de nada, no funciona. No se puede desactivar la opción que ENTER te acepte el formulario?

    Saludos

    Overall – 24-Oct-2008 # 10:20:49 – P:3

    Ahora te entiendo Luis. El tema ahí es que todavía no están disponbles dos señales que se refieran al evento previo y posterior a la pulsación de botón, por ahí podrás hacer el control que comentas. Como aceptas sin ganar foco el botón, no se dispara la señal, pero como te digo dispondrás de nuevas señales para esos casos.

    Muchas gracias por tus comentarios y tu colaboración.

    Un saludo

  19. hijosdebombin dice:

    Hola,

    Quisiera exponer algo que es una nimiedad para la mayoría de los programadores con sólo un poquito de experiencia, pero que para los que se inician creo que puede resultarles un poco confuso. No es mi deseo que nadie se sienta ofendido, ni quedar como un experto en lengua, que ni mucho menos lo soy, pero en varias ocasiones me he sentido confundido con este tipo de cosas y hoy me he decidido a intervenir.

    El hecho es el siguiente:

    El código del evento de este artículo testa el campo #NAME y, si está vacío, muestra el mensaje. Esto se ve y se entiende, pero… ¿por todos?

    Al leer las tres primeras líneas:

    Rem ( Comprobamos si el usuario ha introducido un valor en el campo nombre )

    if ( isEmpty( #NAME ) )

    Rem ( Si no es así, mostramos un mensaje )

    Messege ( “Debe introducir un nombre”, Exclamation mark, , )

    Se producen los siguientes procesos mentales en los que no tenemos experiencia:

    1. Con la primera quedo enterado de que testaremos si el campo nombre tiene valor.

    2. La segunda la leo como: Si #NAME está vacío

    3. Al leer la tercera pienso: Si no es así, es decir, si no está vacío… mostramos un mensaje. Pero si muestro un mensaje si no está vacío y lo que queremos es impedir que #NAME quede vacío, ¡qué pasa aquí!

    Es decir, tendemos a asociar el mostrar el mensaje con lo expresado en la línea tres y no con la dos.

    Siendo así, entiendo que estas líneas debiesen comentarse con algo como:

    Rem ( Testamos el campo nombre para evitar que quede vacío )

    if ( isEmpty( #NAME ) )

    Rem ( Si lo está, mostramos un mensaje )

    Messege ( “Debe introducir un nombre”, Exclamation mark, , )

    Naturalmente que siempre hay quien lo coge a la primera.

    Saludos,

  20. hijosdebombin dice:

    Hola,

    Quisiera exponer algo que es una nimiedad para la mayoría de los programadores con sólo un poquito de experiencia, pero que para los que se inician creo que puede resultarles un poco confuso. No es mi deseo que nadie se sienta ofendido, ni quedar como un experto en lengua, que ni mucho menos lo soy, pero en varias ocasiones me he sentido confundido con este tipo de cosas y hoy me he decidido a intervenir.

    El hecho es el siguiente:

    El código del evento de este artículo testa el campo #NAME y, si está vacío, muestra el mensaje. Esto se ve y se entiende, pero… ¿por todos?

    Al leer las tres primeras líneas:

    Rem ( Comprobamos si el usuario ha introducido un valor en el campo nombre )

    if ( isEmpty( #NAME ) )

    Rem ( Si no es así, mostramos un mensaje )

    Messege ( “Debe introducir un nombre”, Exclamation mark, , )

    Se producen los siguientes procesos mentales en los que no tenemos experiencia:

    1. Con la primera quedo enterado de que testaremos si el campo nombre tiene valor.

    2. La segunda la leo como: Si #NAME está vacío

    3. Al leer la tercera pienso: Si no es así, es decir, si no está vacío… mostramos un mensaje. Pero si muestro un mensaje si no está vacío y lo que queremos es impedir que #NAME quede vacío, ¡qué pasa aquí!

    Es decir, tendemos a asociar el mostrar el mensaje con lo expresado en la línea tres y no con la dos.

    Siendo así, entiendo que estas líneas debiesen comentarse con algo como:

    Rem ( Testamos el campo nombre para evitar que quede vacío )

    if ( isEmpty( #NAME ) )

    Rem ( Si lo está, mostramos un mensaje )

    Messege ( “Debe introducir un nombre”, Exclamation mark, , )

    Naturalmente que siempre hay quien lo coge a la primera.

    Saludos,

  21. hijosdebombin dice:

    Hola de nuevo,

    Alguna vez he visto mensajes duplicados, es decir, enviados dos veces seguidas y al ver que mi mensaje también ha sido enviado dos veces (lo que no me ha gustado) he pensado qué hice para ello y ha sido lo siguiente.

    Cuando lo envié, la pantalla me mostró las gracias del equipo de desarrollo de V7 por mi colaboración, como supongo a todos, pero no veía mi artículo abierto, ni un enlace para ver mi artículo, como en los foros o así, entonces pulsé F5 para que se actualizase la página y… bueno aquí es donde debió enviarse de nuevo.

    Sí, después ya advertí el enlace al artículo en la izquierda, pero eso, después.

    Saludos,

  22. mivimu dice:

    ¿Cómo puedo llamar a un formulario desde un botón?

    Me esplico un poco mejor. Tengo un formulario en el que hay que introducir una clave

    al darle al boton aceptar, si la clave es correcta se debe abrir otro formulario que hará de menú para una serie de opciones. No encuentro la forma de llamar al formulario desde un proceso ni veo la forma de llamar a una accion desde un proceso.

    Perdonad si la pregunta es muy elemental, o esta fuera de lugar.

    Saludos de Miguel.

  23. Comercial dice:

    Hola, no se si a alguien le ha pasado, pero no me abre el editor de procesos ni a tiros, cuando creo el evento, veo el objeto sus propiedades, identificador, nombre etc. pero no veo donde introducir instrucciones.

  24. fgutierrez dice:

    Hola,

    Quisiera exponer algo que es una nimiedad para la mayoría de los programadores con sólo un poquito de experiencia, pero que para los que se inician creo que puede resultarles un poco confuso. No es mi deseo que nadie se sienta ofendido, ni quedar como un experto en lengua, que ni mucho menos lo soy, pero en varias ocasiones me he sentido confundido con este tipo de cosas y hoy me he decidido a intervenir.

    El hecho es el siguiente:

    El código del evento de este artículo testa el campo #NAME y, si está vacío, muestra el mensaje. Esto se ve y se entiende, pero… ¿por todos?

    Al leer las tres primeras líneas:

    Rem ( Comprobamos si el usuario ha introducido un valor en el campo nombre )

    if ( isEmpty( #NAME ) )

    Rem ( Si no es así, mostramos un mensaje )

    Messege ( “Debe introducir un nombre”, Exclamation mark, , )

    Se producen los siguientes procesos mentales en los que no tenemos experiencia:

    1. Con la primera quedo enterado de que testaremos si el campo nombre tiene valor.

    2. La segunda la leo como: Si #NAME está vacío

    3. Al leer la tercera pienso: Si no es así, es decir, si no está vacío… mostramos un mensaje. Pero si muestro un mensaje si no está vacío y lo que queremos es impedir que #NAME quede vacío, ¡qué pasa aquí!

    Es decir, tendemos a asociar el mostrar el mensaje con lo expresado en la línea tres y no con la dos.

    Siendo así, entiendo que estas líneas debiesen comentarse con algo como:

    Rem ( Testamos el campo nombre para evitar que quede vacío )

    if ( isEmpty( #NAME ) )

    Rem ( Si lo está, mostramos un mensaje )

    Messege ( “Debe introducir un nombre”, Exclamation mark, , )

    Naturalmente que siempre hay quien lo coge a la primera.

    Saludos,

    Perdón ya que ha sido un error. El texto ha sido construido suponiendo una continuación que no se explicita. Si lees las frases seguidas verás que si son coherentes.:

    Comprobamos si el usuario ha introducido un valor en el campo nombre. Si no es así, mostramos un mensaje.

    Pero es verdad que esa continuidad no ha sido explicitada de alguna forma.

    Gracias por vuestra colaboración.

    Un saludo.

  25. fgutierrez dice:

    Hola de nuevo,

    Alguna vez he visto mensajes duplicados, es decir, enviados dos veces seguidas y al ver que mi mensaje también ha sido enviado dos veces (lo que no me ha gustado) he pensado qué hice para ello y ha sido lo siguiente.

    Cuando lo envié, la pantalla me mostró las gracias del equipo de desarrollo de V7 por mi colaboración, como supongo a todos, pero no veía mi artículo abierto, ni un enlace para ver mi artículo, como en los foros o así, entonces pulsé F5 para que se actualizase la página y… bueno aquí es donde debió enviarse de nuevo.

    Sí, después ya advertí el enlace al artículo en la izquierda, pero eso, después.

    Saludos,

    Hijosdebombin – 27-Oct-2008 # 20:40:06 – P:3

    Como comentas, al refrescar la página vuelves a enviar la información del post. También es verdad que cuando creas un comentario, éste no aparece hasta que cargas el artículo o actualizas el blog de betatesters.

    Te recomiendo que una vez has posteado, actualices el blog pulsando en la opción Betatesters del menú, y así podrás ver tu último comentario y pulsar sobre él para ver cómo ha quedado.

    De todos modos, comentaremos al departamento encargado de la web que avise de la circunstancia y evite la actualización de la página.

    Gracias por tu colaboración.

    Un saludo.

  26. fgutierrez dice:

    ¿Cómo puedo llamar a un formulario desde un botón?

    Me esplico un poco mejor. Tengo un formulario en el que hay que introducir una clave

    al darle al boton aceptar, si la clave es correcta se debe abrir otro formulario que hará de menú para una serie de opciones. No encuentro la forma de llamar al formulario desde un proceso ni veo la forma de llamar a una accion desde un proceso.

    Perdonad si la pregunta es muy elemental, o esta fuera de lugar.

    Saludos de Miguel.

    Mivimu – 2-Nov-2008 # 12:27:12 – P:3

    Hay dos formas. La más sencilla: la misma acción con que llamarías a ese menú, basta que la uses como comando del botón que quieres que lance el menú. Y así lo tienes. La acción ha de ser sin origen, de la misma forma que lo será el formulario que quieres usar como menú.

    La otra opción: Un botón puede desplegar un objeto menú, que a su vez contenga la acción que lanza el formulario que quieres usar como menú.

    Nuestra intención es que tengas todas las formas posibles de gestionar menús, y que estos sean del tipo que tú quieras, desplegables o con formularios.

    Espero haberte ayudado.

    Un saludo.

  27. fgutierrez dice:

    Hola, no se si a alguien le ha pasado, pero no me abre el editor de procesos ni a tiros, cuando creo el evento, veo el objeto sus propiedades, identificador, nombre etc. pero no veo donde introducir instrucciones.

    Comercial – 24-Nov-2008 # 13:39:14 – P:3

    Cuando creas un evento este cuelga a partir de ahí del objeto padre en el árbol de objetos por tipo. Verás que te aparece un cuadro de apertura de árbol (igual que sucede en los eventos de tabla de la caja de datos). Haciendo doble clic sobre el objeto evento que ahí te aparece, abrirá el editor de instrucciones similar al que dispones para los procesos, eventos de tabla, etc.

    La diferencia será que tienes un grupo de comandos de instrucción nuevo, denominado “de interfaz” que te permitirán acceder a los controles existentes en el objeto principal, y que compartirá las variables locales con el objeto y el resto de eventos.

    Pruébalo, y verás la potencia que estos objetos aportan al desarrollo.

    Un saludo.

  28. Comercial dice:

    Gracias, falta rodaje. Aunque ¿porque no abrir los objetos siempre que se haga doble-click sobre ellos, sea donde sea?.

Deja un comentario

Esta web utiliza cookies. Si continúa navegando acepta dichas cookies y nuestra política de cookies. Gracias. ACEPTAR

Aviso de cookies