Gracias Rui Pinto (Rapinto)
COBOL Foro
Foro dedicado a COBOL, a la Programación y a la Informática.
Retroceder   COBOL Foro > IDE-s y compiladores COBOL > Fujitsu COBOL > PowerCOBOL y COM/OLE
PowerCOBOL y COM/OLE La utilización de COM / OLE en PowerCOBOL
Noticias y Avisos
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Sintaxis] Error en programa: Illegal function call Begoguay PowerCOBOL (ActiveX, v4 - v11) 3 11 de julio de 2018 19:41
[Sintaxis] CALL a programas externos en Windows 8 Gusaiello AcuCobol 8 28 de diciembre de 2017 18:08
[Aporte] CALL de cualquier DLL sin *.LIB ni "LoadLibrary" Kuk Cocina PowerCOBOL 20 29 de julio de 2017 23:33
[Compilador] Fujitsu Cobol for Windows Call EXE Joseg NetCOBOL for Windows 1 29 de octubre de 2016 23:18
[Sintaxis] Imprimir PDF desde DOS (CALL "SYSTEM") Roger RM/COBOL 1 1 de julio de 2016 16:40
Respuesta
 
Herramientas

  #1
Antiguo 29 de marzo de 2017, 14:06
IDENTIFICATION DIVISION
Joseg
Novato Senior
ENVIRONMENT DIVISION
Avatar de Joseg
DATA DIVISION
Forero desde (Registrado)abril 2015
Reino Unido
Última Actividad06.12.2019 13:57
PROCEDURE DIVISION
PostsPosts: 168
Ha dicho GraciasEnviado: 37
Ha recibido agradecimientosRecibido: 51
Mejores respuestasSoluiones: 9
Medallas recibidas: 1Medallas: Innovación: Por aportar innovaciones - Razón: Por aportar soluciones innovadoras en varias ocasiones 
ReputaciónReputación: 9
Joseg has a spectacular aura about Joseg has a spectacular aura about Joseg has a spectacular aura about Joseg has a spectacular aura about Joseg has a spectacular aura about
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
Joseg no ha iniciado sesión   Responder Con Cita
  #2
Antiguo 29 de marzo de 2017, 14:25
IDENTIFICATION DIVISION
Kuk
Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
Forero desde (Registrado)enero 2015
España
UbicaciónMadrid
Edad34 años
Última Actividad09.12.2019 21:16
PROCEDURE DIVISION
PostsPosts: 1.428
Ha dicho GraciasEnviado: 319
Ha recibido agradecimientosRecibido: 547
Mejores respuestasSoluiones: 87
ReputaciónReputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
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)


NORMAS DEL FORO - obligatorias de conocer para TODOS.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale Pinchando en su Nick:

Kuk no ha iniciado sesión   Responder Con Cita
  #3
Antiguo 29 de marzo de 2017, 15:04
IDENTIFICATION DIVISION
Joseg
Novato Senior
ENVIRONMENT DIVISION
Avatar de Joseg
DATA DIVISION
Forero desde (Registrado)abril 2015
Reino Unido
Última Actividad06.12.2019 13:57
PROCEDURE DIVISION
PostsPosts: 168
Ha dicho GraciasEnviado: 37
Ha recibido agradecimientosRecibido: 51
Mejores respuestasSoluiones: 9
Medallas recibidas: 1Medallas: Innovación: Por aportar innovaciones - Razón: Por aportar soluciones innovadoras en varias ocasiones 
ReputaciónReputación: 9
Joseg has a spectacular aura about Joseg has a spectacular aura about Joseg has a spectacular aura about Joseg has a spectacular aura about Joseg has a spectacular aura about
Predeterminado

Cita del post de 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)
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.
Joseg no ha iniciado sesión   Responder Con Cita
  #4
Antiguo 29 de marzo de 2017, 15:28
IDENTIFICATION DIVISION
Kuk
Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
Forero desde (Registrado)enero 2015
España
UbicaciónMadrid
Edad34 años
Última Actividad09.12.2019 21:16
PROCEDURE DIVISION
PostsPosts: 1.428
Ha dicho GraciasEnviado: 319
Ha recibido agradecimientosRecibido: 547
Mejores respuestasSoluiones: 87
ReputaciónReputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
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 del post de 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:
Código COBOL:
  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
Código COBOL:
  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:
Código COBOL:
  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)
Código COBOL:
  1.  WORKING-STORAGE SECTION.
  2.  01  MiCampoExt IS EXTERNAL PIC X(50).
  3.  PROCEDURE DIVISION.    
  4.  
  5.      MOVE POW-TEXT OF CmText1 TO MiCampoExt


NORMAS DEL FORO - obligatorias de conocer para TODOS.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale Pinchando en su Nick:

Kuk no ha iniciado sesión   Responder Con Cita
  #5
Antiguo 29 de marzo de 2017, 18:35
IDENTIFICATION DIVISION
Kuk
Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
Forero desde (Registrado)enero 2015
España
UbicaciónMadrid
Edad34 años
Última Actividad09.12.2019 21:16
PROCEDURE DIVISION
PostsPosts: 1.428
Ha dicho GraciasEnviado: 319
Ha recibido agradecimientosRecibido: 547
Mejores respuestasSoluiones: 87
ReputaciónReputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
Predeterminado

Joseg, lo he comprobado. Con el

Código COBOL:
  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.


NORMAS DEL FORO - obligatorias de conocer para TODOS.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale Pinchando en su Nick:

Kuk no ha iniciado sesión   Responder Con Cita
  #6
Antiguo 29 de marzo de 2017, 18:35
IDENTIFICATION DIVISION
Nitzer
Guru de COBOL
ENVIRONMENT DIVISION
Avatar de Nitzer
DATA DIVISION
Forero desde (Registrado)noviembre 2015
España
UbicaciónAlmeria
Edad54 años
Última Actividad20.10.2019 12:22
PROCEDURE DIVISION
PostsPosts: 75
Ha dicho GraciasEnviado: 33
Ha recibido agradecimientosRecibido: 42
Mejores respuestasSoluiones: 3
Medallas recibidas: 1Medallas: Guru de los Gurus: Por solidos y amplios conocimientos - Razón: Por aportar conocimientos excepcionales 
ReputaciónReputación: 9
Nitzer is on a distinguished road Nitzer is on a distinguished road Nitzer is on a distinguished road Nitzer is on a distinguished road Nitzer is on a distinguished road
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.
Nitzer no ha iniciado sesión   Responder Con Cita
  #7
Antiguo 29 de marzo de 2017, 19:39
IDENTIFICATION DIVISION
Joseg
Novato Senior
ENVIRONMENT DIVISION
Avatar de Joseg
DATA DIVISION
Forero desde (Registrado)abril 2015
Reino Unido
Última Actividad06.12.2019 13:57
PROCEDURE DIVISION
PostsPosts: 168
Ha dicho GraciasEnviado: 37
Ha recibido agradecimientosRecibido: 51
Mejores respuestasSoluiones: 9
Medallas recibidas: 1Medallas: Innovación: Por aportar innovaciones - Razón: Por aportar soluciones innovadoras en varias ocasiones 
ReputaciónReputación: 9
Joseg has a spectacular aura about Joseg has a spectacular aura about Joseg has a spectacular aura about Joseg has a spectacular aura about Joseg has a spectacular aura about
Predeterminado

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



Cita del post de 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:
Código COBOL:
  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
Código COBOL:
  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:
Código COBOL:
  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)
Código COBOL:
  1.  WORKING-STORAGE SECTION.
  2.  01  MiCampoExt IS EXTERNAL PIC X(50).
  3.  PROCEDURE DIVISION.    
  4.  
  5.      MOVE POW-TEXT OF CmText1 TO MiCampoExt
Joseg no ha iniciado sesión   Responder Con Cita
  #8
Antiguo 29 de marzo de 2017, 20:13
IDENTIFICATION DIVISION
Kuk
Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
Forero desde (Registrado)enero 2015
España
UbicaciónMadrid
Edad34 años
Última Actividad09.12.2019 21:16
PROCEDURE DIVISION
PostsPosts: 1.428
Ha dicho GraciasEnviado: 319
Ha recibido agradecimientosRecibido: 547
Mejores respuestasSoluiones: 87
ReputaciónReputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
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.


NORMAS DEL FORO - obligatorias de conocer para TODOS.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale Pinchando en su Nick:

Kuk no ha iniciado sesión   Responder Con Cita
  #9
Antiguo 30 de marzo de 2017, 11:56
IDENTIFICATION DIVISION
Kuk
Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
Forero desde (Registrado)enero 2015
España
UbicaciónMadrid
Edad34 años
Última Actividad09.12.2019 21:16
PROCEDURE DIVISION
PostsPosts: 1.428
Ha dicho GraciasEnviado: 319
Ha recibido agradecimientosRecibido: 547
Mejores respuestasSoluiones: 87
ReputaciónReputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
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.


NORMAS DEL FORO - obligatorias de conocer para TODOS.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale Pinchando en su Nick:

Kuk no ha iniciado sesión   Responder Con Cita
Respuesta

Tags
cerrar , form , powercobol


Usuarios activos actualmente viendo este tema: 1 (0 miembros y 1 visitantes)
 
Herramientas

Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado



La franja horaria es GMT +1. Ahora son las 00:37.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2019, Jelsoft Enterprises Ltd.