Resultados 1 al 9 de 9

Tema: Form1 CALL a Form2 y este cierra el Form1

  1. #1
      Senior
    Avatar de Joseg

    Registrado
    abril de 2015
    Mensajes
    331
    Última visita
    02.04.2024

    Agradecimientos
     
    Recibidos
    147
    Enviados
    92

    Citaciones y menciones
     
    Mentioned
    28 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    4 Post(s)
    Poder de Reputación
    21
    Activista del Foro / Point Value: 0 Innovación / Point Value: 0

    Form Form1 CALL a Form2 y este cierra el Form1

    ¿Esto es posible?
    Botón en una "form" llamada y poner fin a la "form" actual.
    "Form1" ---> "Botón1 ---> Call "Form2" y cierra "Form1".
    (Código sobre el botón 1)

    Gracias,
    Jose

    0 Not allowed!

  2. #2
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    39
    Mensajes
    2,286
    Última visita
    Ayer a las 18:48

    Agradecimientos
     
    Recibidos
    1,036
    Enviados
    888

    Citaciones y menciones
     
    Mentioned
    102 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    31 Post(s)
    Poder de Reputación
    10

    Predeterminado

    @Joseg, esto es un caso que se puede lograr a hacer, pero normalmente se puede evitar. ¿Para qué lo necesitas?

    En realidad, aquí de lo que se trata es la dependencia de Forms y Procesos. Se puede hacer, por ejemplo, si Form1 y Form2 están en diferentes EXE-s. No se puede hacer si los Forms están en DLL. EN todo caso se necesita un Main Module para abrir un Form. Además, en PowerCOBOL no estamos en creación de GUI-s nativas, con lo cual no tenemos mucho control sobre el asunto.

    Yo lo necesité una vez, porque mi aplicación comprobaba si había una versión nueva, y si le dabas a "Actualizar", se cerraba, lanzaba el "intall.exe" nuevo que se ha descargado, y luego se volvía a ejecutar el Main.exe (pero tendré que mirar cómo lo hice, no me acuerdo) :rie:

    0 Not allowed!
    ¿Te han ayudado? NO TE OLVIDES de darle al botón
    ¿Quieres dirigirte a alguien en tu post? Notifícale con una mención, tienes 2 opciones:
    1. Haciendo clic en el icono al lado de su nick
    2. Haciendo clic en el botón en el editor y escribiendo su nick.

  3. #3
      Senior
    Avatar de Joseg

    Registrado
    abril de 2015
    Mensajes
    331
    Última visita
    02.04.2024

    Agradecimientos
     
    Recibidos
    147
    Enviados
    92

    Citaciones y menciones
     
    Mentioned
    28 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    4 Post(s)
    Poder de Reputación
    21
    Activista del Foro / Point Value: 0 Innovación / Point Value: 0

    Predeterminado

    Cita Iniciado por Kuk Ver Mensaje
    @Joseg, esto es un caso que se puede lograr a hacer, pero normalmente se puede evitar. ¿Para qué lo necesitas?

    En realidad, aquí de lo que se trata es la dependencia de Forms y Procesos. Se puede hacer, por ejemplo, si Form1 y Form2 están en diferentes EXE-s. No se puede hacer si los Forms están en DLL. EN todo caso se necesita un Main Module para abrir un Form. Además, en PowerCOBOL no estamos en creación de GUI-s nativas, con lo cual no tenemos mucho control sobre el asunto.

    Yo lo necesité una vez, porque mi aplicación comprobaba si había una versión nueva, y si le dabas a "Actualizar", se cerraba, lanzaba el "intall.exe" nuevo que se ha descargado, y luego se volvía a ejecutar el Main.exe (pero tendré que mirar cómo lo hice, no me acuerdo) :rie:
    Gracias

    Las "forms" están en la misma DLL.
    Básicamente quería que el "Form2" llamada "Form1", pero esto no es posible ya está abierto.
    Formulario1 "open" Formulario2, que realiza ciertas tareas que deriam se reflejan automáticamente en Formulario1.

    0 Not allowed!

  4. #4
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    39
    Mensajes
    2,286
    Última visita
    Ayer a las 18:48

    Agradecimientos
     
    Recibidos
    1,036
    Enviados
    888

    Citaciones y menciones
     
    Mentioned
    102 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    31 Post(s)
    Poder de Reputación
    10

    Predeterminado

    @Joseg, lo que puedes hacer es pasar el Form1 (que es el que necesitas varias veces) a una DLL nueva y fijar el código en OO COBOL. Hay que copiar y pegar código en los eventos porque (!!!) al cambiar de COBOL85 a OO COBOL se borra todo el código en los eventos, pero bueno no es un problema. Teniendo copia de ese Form en el proyecto, simplemente haces Copiar/Pegar en cada evento.

    De esta manera, cada vez que invoques ese Form1 se creará una copia nueva (obvio, estando en modo OO). Yo tengo hecho esto para un proyecto donde creé mi propio MessageBox.

    ---------- Post añadido : 15:28 ---------- Post anterior : 15:08 ----------

    Cita Iniciado por Joseg Ver Mensaje
    Formulario1 "open" Formulario2, que realiza ciertas tareas que deriam se reflejan automáticamente en Formulario1.
    Y esto se puede hacer de la siguiente manera:
    En el Form1 defines unos campos como EXTERNAL, Y pones un TIMER. A la hora de llamar el Form 2 lo haces con OpenForm (para continuar ejecutando el Timer) y con Cookie (para saber cuando se ha cerrado el Form2 en el evento "CloseChild" del Form1).

    El código más o menos sería algo así:

    Form1->Button1Click:
    COBOL Código:
    1.      MOVE POW-TRUE  TO "Active"  OF Timer1
    2.      MOVE POW-FALSE TO "Enabled" OF CmCommand1
    3.      
    4.      INVOKE POW-SELF "OpenForm" USING "Form2" 1

    Form1->Timer
    COBOL Código:
    1.  WORKING-STORAGE SECTION.
    2.  01  MiCampoExt IS EXTERNAL PIC X(50).
    3.  PROCEDURE DIVISION.    
    4.  
    5.      MOVE MiCampoExt TO POW-TEXT OF CmText1

    Form1->CloseChild:
    COBOL Código:
    1.  LINKAGE SECTION.
    2.  01  POW-COOKIE PIC S9(9) COMP-5.
    3.  PROCEDURE DIVISION USING POW-COOKIE.
    4.      
    5.      IF  POW-COOKIE = 1 *> nuestro Form2
    6.          MOVE POW-FALSE TO "Active"  OF Timer1
    7.          MOVE POW-TRUE  TO "Enabled" OF CmCommand1
    8.      END-IF

    Form2->OnChange (o cualquier evento)
    COBOL Código:
    1.  WORKING-STORAGE SECTION.
    2.  01  MiCampoExt IS EXTERNAL PIC X(50).
    3.  PROCEDURE DIVISION.    
    4.  
    5.      MOVE POW-TEXT OF CmText1 TO MiCampoExt

    0 Not allowed!
    ¿Te han ayudado? NO TE OLVIDES de darle al botón
    ¿Quieres dirigirte a alguien en tu post? Notifícale con una mención, tienes 2 opciones:
    1. Haciendo clic en el icono al lado de su nick
    2. Haciendo clic en el botón en el editor y escribiendo su nick.

  5. #5
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    39
    Mensajes
    2,286
    Última visita
    Ayer a las 18:48

    Agradecimientos
     
    Recibidos
    1,036
    Enviados
    888

    Citaciones y menciones
     
    Mentioned
    102 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    31 Post(s)
    Poder de Reputación
    10

    Predeterminado

    @Joseg, lo he comprobado. Con el

    COBOL Código:
    1.      INVOKE POW-SELF "Execute" USING ...

    No se cierra el programa llamado. O sea que se puede hacer si los dos Forms son EXE, pero esto en este caso no sirve. Así que habrá que intentar hacerlo como lo he dicho antes, con el Timer.

    0 Not allowed!
    ¿Te han ayudado? NO TE OLVIDES de darle al botón
    ¿Quieres dirigirte a alguien en tu post? Notifícale con una mención, tienes 2 opciones:
    1. Haciendo clic en el icono al lado de su nick
    2. Haciendo clic en el botón en el editor y escribiendo su nick.

  6. #6
      Guru de COBOL
    Avatar de Nitzer

    Registrado
    noviembre de 2015
    Ubicación
    Almeria
    Edad
    58
    Mensajes
    203
    Última visita
    15.03.2024

    Agradecimientos
     
    Recibidos
    161
    Enviados
    73

    Citaciones y menciones
     
    Mentioned
    52 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    7 Post(s)
    Poder de Reputación
    20
    Activista del Foro / Point Value: 0 Guru de los Gurus / Point Value: 0

    Predeterminado

    NO me he metido con el tema de OOCobol mucho y seguramente se le puede dar mucho uso.

    Yo también tengo personalizado el DisplayMessage con un form, pero para evitar que se abra mas de una vez, simplemente lo invoco con CALLFORM2 ya que entiendo que siendo una ventana de pregunta y respuesta rápida, no debe el usuario estar en otro sitio.

    En cuanto al tema de la discusión, me he perdido un poco, quizás entendiéndolo mejor os pueda ayudar.

    0 Not allowed!

  7. #7
      Senior
    Avatar de Joseg

    Registrado
    abril de 2015
    Mensajes
    331
    Última visita
    02.04.2024

    Agradecimientos
     
    Recibidos
    147
    Enviados
    92

    Citaciones y menciones
     
    Mentioned
    28 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    4 Post(s)
    Poder de Reputación
    21
    Activista del Foro / Point Value: 0 Innovación / Point Value: 0

    Predeterminado

    Mi experiencia en OOCOBOL no es mucho, pero lo intentaré.
    Muchas gracias



    Cita Iniciado por Kuk Ver Mensaje
    @Joseg, lo que puedes hacer es pasar el Form1 (que es el que necesitas varias veces) a una DLL nueva y fijar el código en OO COBOL. Hay que copiar y pegar código en los eventos porque (!!!) al cambiar de COBOL85 a OO COBOL se borra todo el código en los eventos, pero bueno no es un problema. Teniendo copia de ese Form en el proyecto, simplemente haces Copiar/Pegar en cada evento.

    De esta manera, cada vez que invoques ese Form1 se creará una copia nueva (obvio, estando en modo OO). Yo tengo hecho esto para un proyecto donde creé mi propio MessageBox.

    ---------- Post añadido : 15:28 ---------- Post anterior : 15:08 ----------




    Y esto se puede hacer de la siguiente manera:
    En el Form1 defines unos campos como EXTERNAL, Y pones un TIMER. A la hora de llamar el Form 2 lo haces con OpenForm (para continuar ejecutando el Timer) y con Cookie (para saber cuando se ha cerrado el Form2 en el evento "CloseChild" del Form1).

    El código más o menos sería algo así:

    Form1->Button1Click:
    COBOL Código:
    1.      MOVE POW-TRUE  TO "Active"  OF Timer1
    2.      MOVE POW-FALSE TO "Enabled" OF CmCommand1
    3.      
    4.      INVOKE POW-SELF "OpenForm" USING "Form2" 1

    Form1->Timer
    COBOL Código:
    1.  WORKING-STORAGE SECTION.
    2.  01  MiCampoExt IS EXTERNAL PIC X(50).
    3.  PROCEDURE DIVISION.    
    4.  
    5.      MOVE MiCampoExt TO POW-TEXT OF CmText1

    Form1->CloseChild:
    COBOL Código:
    1.  LINKAGE SECTION.
    2.  01  POW-COOKIE PIC S9(9) COMP-5.
    3.  PROCEDURE DIVISION USING POW-COOKIE.
    4.      
    5.      IF  POW-COOKIE = 1 *> nuestro Form2
    6.          MOVE POW-FALSE TO "Active"  OF Timer1
    7.          MOVE POW-TRUE  TO "Enabled" OF CmCommand1
    8.      END-IF

    Form2->OnChange (o cualquier evento)
    COBOL Código:
    1.  WORKING-STORAGE SECTION.
    2.  01  MiCampoExt IS EXTERNAL PIC X(50).
    3.  PROCEDURE DIVISION.    
    4.  
    5.      MOVE POW-TEXT OF CmText1 TO MiCampoExt

    0 Not allowed!

  8. #8
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    39
    Mensajes
    2,286
    Última visita
    Ayer a las 18:48

    Agradecimientos
     
    Recibidos
    1,036
    Enviados
    888

    Citaciones y menciones
     
    Mentioned
    102 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    31 Post(s)
    Poder de Reputación
    10

    Predeterminado

    @Joseg, en realidad cara al modo de programación para ti no cambia casi nada, es más que nada el código generado por detrás el que cambia. Hay algunas cosas como que por ejemplo en la WORKING del Form ya no hay que poner GLOBAL, ya de por sí las variables son globales y alguna que otra cosa más pero vamos, nada importante. Puedes copiar y pegar código de los eventos del antiguo Form (COBOL85) al nuevo (OO COBOL) y lo más seguro es que se compile sin problemas o sólo tengas que modificar un par de tonterías.

    0 Not allowed!
    ¿Te han ayudado? NO TE OLVIDES de darle al botón
    ¿Quieres dirigirte a alguien en tu post? Notifícale con una mención, tienes 2 opciones:
    1. Haciendo clic en el icono al lado de su nick
    2. Haciendo clic en el botón en el editor y escribiendo su nick.

  9. #9
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    39
    Mensajes
    2,286
    Última visita
    Ayer a las 18:48

    Agradecimientos
     
    Recibidos
    1,036
    Enviados
    888

    Citaciones y menciones
     
    Mentioned
    102 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    31 Post(s)
    Poder de Reputación
    10

    Predeterminado

    @Nitzer, se me había escapado tu post

    Para mi, la mayor ventaja del modo OO COBOL en PowerCOBOL es que puedes tener nuevas copias de tus Forms (nuevas instancias). También, si necesitas intercambiar datos por ejemplo con Java o necesitas una tabla interna dinámica (UNBOUNDED) también se puede hacer, aunque esto yo nunca lo he necesitado.

    Yo lo necesité porque creé una aplicación simulando MDI, o sea que tenía una ventana principal y varias ventanas (aplicaciones) dentro de esta. Se podía trabajar con varias aplicaciones (pestañas) al mismo tiempo, por eso necesitaba que se pudiera tener varios MessageBox a la vez.

    0 Not allowed!
    ¿Te han ayudado? NO TE OLVIDES de darle al botón
    ¿Quieres dirigirte a alguien en tu post? Notifícale con una mención, tienes 2 opciones:
    1. Haciendo clic en el icono al lado de su nick
    2. Haciendo clic en el botón en el editor y escribiendo su nick.

Información de Tema

Usuarios Viendo este Tema

Actualmente hay 1 usuarios viendo este tema. (0 miembros y 1 visitantes)

Temas Similares

  1. [Sintaxis] CALL a programas externos en Windows 8
    Por Gusaiello en el foro AcuCobol
    Respuestas: 9
    Último Mensaje: 15.03.2023, 20:23
  2. [Sintaxis] Error en programa: Illegal function call
    Por Begoguay en el foro PowerCOBOL (ActiveX, v4 - v11)
    Respuestas: 3
    Último Mensaje: 11.07.2018, 19:41
  3. [Aporte] CALL de cualquier DLL sin *.LIB ni "LoadLibrary"
    Por Kuk en el foro Cocina PowerCOBOL
    Respuestas: 20
    Último Mensaje: 29.07.2017, 23:33
  4. [Compilador] Fujitsu Cobol for Windows Call EXE
    Por Joseg en el foro NetCOBOL
    Respuestas: 1
    Último Mensaje: 29.10.2016, 23:18
  5. [Sintaxis] Imprimir PDF desde DOS (CALL "SYSTEM")
    Por Roger en el foro RM/COBOL
    Respuestas: 1
    Último Mensaje: 01.07.2016, 16:40

Etiquetas para este Tema

Marcadores

Marcadores

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •