Gracias Rui Pinto (Rapinto)
COBOL Foro
Foro dedicado a COBOL, a la Programación y a la Informática.
  COBOL Foro > IDE-s y compiladores COBOL > Fujitsu COBOL > PowerCOBOL (ActiveX, v4 - v11)
PowerCOBOL (ActiveX, v4 - v11) Versiones del IDE basadas en ActiveX
Comunicados
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Sintaxis] Detectar la inactividad en un Form Hrmcobol PowerCOBOL (ActiveX, v4 - v11) 4 16 de julio de 2016 13:04
[Información] Verificar si Excel (Office) está instalado Joseg PowerCOBOL (ActiveX, v4 - v11) 3 16 de marzo de 2016 14:00
[Sintaxis] Modificar Propiedades de un FORM Recato53 PowerCOBOL (ActiveX, v4 - v11) 11 5 de junio de 2015 08:20
Respuesta
 
Herramientas

  #1
Antiguo 22 de agosto de 2017, 18:26
IDENTIFICATION DIVISION
Armando
 Acabo de llegar...
ENVIRONMENT DIVISION
Avatar de Armando
DATA DIVISION
febrero 2015
Montevideo
63 años
09.06.2021 20:24
PROCEDURE DIVISION
Posts: 25
Enviado: 3
Recibido: 10
Soluiones: 2
Reputación: 0
Armando is on a distinguished road Armando is on a distinguished road
Form Controlar si un Form ya está abierto

Estimados, buenas tardes,

Una consulta, cuando uno llama en una cadena de programas por error a un programa (dll) de esa cadena, nos da un mensaje porque Netcobol no permite la recursividad.

You can create only one "formA"
"formA" has already benn opened as a form, or placed on the form as a control


La pregunta es, existe algún código de status o forma de poder controlar que ya está abierto, con el netcobol? (en definitiva algún de status del callform)
(obvio que con llaves uno lo puede manejar)

gracias,
abrazo
Armando
Armando no ha iniciado sesión   Responder Con Cita
  #2
Antiguo 22 de agosto de 2017, 21:58
IDENTIFICATION DIVISION
Rapinto
 Gran amigo del Foro y Guru de COBOL
Activista del Foro: Activista del Foro - Razón: ¡Gracias!  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Razón: Por ayudar mucho a los foreros  Guru de los Gurus: Por solidos y amplios conocimientos - Razón: Por saber demasiado! 
ENVIRONMENT DIVISION
Avatar de Rapinto
DATA DIVISION
febrero 2015
Porto
29.01.2018 19:23
PROCEDURE DIVISION
Posts: 246
Enviado: 19
Recibido: 221
Soluiones: 47
Reputación: 16
Rapinto is on a distinguished road Rapinto is on a distinguished road Rapinto is on a distinguished road Rapinto is on a distinguished road Rapinto is on a distinguished road Rapinto is on a distinguished road Rapinto is on a distinguished road Rapinto is on a distinguished road
Predeterminado

Armando,
Penso que sim.
Ao fazer o "Call" podes definir um "cookie=1"
No evento:

CloseChild
Description:
Generated when a child form, opened with the OpenForm or CallForm2 (CallForm) method, is closed.
parâmetros do Call :
1. FormName: The name of the form to be opened.

2. DllName: When the form is in a DLL file, defines the name of the DLL file containing the form.
It should be omitted when you specify a form in the same Module, as specifying the same DLL name that contains the invoking form degrades performance.

3. Cookie: An integer to distinguish the opened form.
It is set in a parameter of the CloseChild
when the opened form is closed. If omitted, the parameter value is zero.

Ficas a saber que a form foi fechada.
Não sei se me faço entender.
Se for necessária mais alguma informação diz-me.
Un saludo,
Rui Pinto
Rapinto no ha iniciado sesión   Responder Con Cita
  #3
Antiguo 22 de agosto de 2017, 23:52
IDENTIFICATION DIVISION
Dasije
 Novato Senior
ENVIRONMENT DIVISION
Avatar de Dasije
DATA DIVISION
noviembre 2015
Jerez De La Frontera (cádiz)
06.06.2021 23:36
PROCEDURE DIVISION
Posts: 176
Enviado: 1
Recibido: 78
Soluiones: 7
Reputación: 13
Dasije is on a distinguished road Dasije is on a distinguished road Dasije is on a distinguished road Dasije is on a distinguished road Dasije is on a distinguished road Dasije is on a distinguished road Dasije is on a distinguished road
Predeterminado

Sí sabes usar apis de windows, hay funciones para capturar el título del formulario, y si existe, ya sabes que está abierto en ese momento.

Un colega lo conseguió, por mi inicitiva de mejorar su aplicación y mía por necesidad en la propia aplicación, la idea era de capturar las teclas desde cualquier parte de la aplicación, antes de abrir el formulario se comprueba si existe, así se evitaba el error que te aparece.


Empresa de desarrollo de aplicaciones en COBOL.

DASIJE INFORMATICA, S.L.
C/ TOMAS BRETON 20
11406 JEREZ DE LA FRONTERA
CADIZ

Teléfono : 956 11 21 11
Web: http://www.dasije.es / DASIJE INFORMATICA
E-m@il: clientes(@)dasije.es
Dasije no ha iniciado sesión   Responder Con Cita
  #4
Antiguo 23 de agosto de 2017, 07:43
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
diciembre 2014
Madrid
36 años
15.06.2021 16:17
PROCEDURE DIVISION
Posts: 1.753
Enviado: 551
Recibido: 720
Soluiones: 94
Reputació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

Armando, no es la recursividad sino la multi-instancia. En realidad, si desde el principio establecemos el tipo de script a OO COBOL en la propiedades del módulo, permite multiinstancia. Pero al caso.

Sí que se puede saber, como decía Rapinto. Un ejemplo simple:

Abres 2 Forms con 2 botones.
MainForm.CmCommand1.Click:

Código COBOL:
  1.      INVOKE POW-SELF "OpenForm" USING "Form1" 1 *> donde 1 es la ID de la cookie
  2.  
  3.      MOVE POW-FALSE TO "Enabled" OF CmCommand1

MainForm.CmCommand2.Click:

Código COBOL:
  1.      INVOKE POW-SELF "OpenForm" USING "Form2" 2 *> donde 2 es la ID de la cookie
  2.  
  3.      MOVE POW-FALSE TO "Enabled" OF CmCommand2

Ahora, en el evento "CloseChild" del MainForm haces:

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
  6.          MOVE POW-TRUE TO "Enabled" OF CmCommand1
  7.      END-IF
  8.      
  9.      IF  POW-COOKIE = 2
  10.          MOVE POW-TRUE TO "Enabled" OF CmCommand2
  11.      END-IF

Y listo. Este es el mecanismo. A partir de esto, puedes hacer loq eu quieras, manejar variables EXTERNAL para saber en otros Forms también, si un Form está abuerto o no etc.



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk no ha iniciado sesión   Responder Con Cita
  #5
Antiguo 23 de agosto de 2017, 16:40
IDENTIFICATION DIVISION
Armando
 Acabo de llegar...
ENVIRONMENT DIVISION
Avatar de Armando
DATA DIVISION
febrero 2015
Montevideo
63 años
09.06.2021 20:24
PROCEDURE DIVISION
Posts: 25
Enviado: 3
Recibido: 10
Soluiones: 2
Reputación: 0
Armando is on a distinguished road Armando is on a distinguished road
Predeterminado

Estimados, a todos muchas gracias,

Si el tema del cookie, en algún caso lo hemos usado y resuelve bien,
Lo mismo lo de las API, de encontrar por el título,

Más que nada, capaz que no supe expresarme bien era si había alguna alternativa, cuando tenés un programa que llama a A, este a B, este a C y el útimo intenta llamar a A de nuevo, si había una alternativa de interceptar el Mensaje en inglés, como en Rmcobol, que hay un PROGRMA-STATUS, si el programa llamado da error (incluso si encuentra la dll, por ejemplo)

Código COBOL:
  1. CALL "PROGRAMA1" USING NDET OBLIGA-338 LLAVE-338
  2.     ON EXCEPTION CONTINUE
  3. END-CALL.
Armando no ha iniciado sesión   Responder Con Cita
  #6
Antiguo 23 de agosto de 2017, 17:51
IDENTIFICATION DIVISION
Joseg
 Forero
Innovación: Por aportar innovaciones - Razón: Por aportar soluciones innovadoras en varias ocasiones 
ENVIRONMENT DIVISION
Avatar de Joseg
DATA DIVISION
abril 2015
14.06.2021 22:24
PROCEDURE DIVISION
Posts: 211
Enviado: 50
Recibido: 86
Soluiones: 12
Reputación: 15
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 Joseg has a spectacular aura about Joseg has a spectacular aura about
Predeterminado

Cita del post de Armando Ver Mensaje
Estimados, a todos muchas gracias,

Si el tema del cookie, en algún caso lo hemos usado y resuelve bien,
Lo mismo lo de las API, de encontrar por el título,

Más que nada, capaz que no supe expresarme bien era si había alguna alternativa, cuando tenés un programa que llama a A, este a B, este a C y el útimo intenta llamar a A de nuevo, si había una alternativa de interceptar el Mensaje en inglés, como en Rmcobol, que hay un PROGRMA-STATUS, si el programa llamado da error (incluso si encuentra la dll, por ejemplo)

Código COBOL:
  1. CALL "PROGRAMA1" USING NDET OBLIGA-338 LLAVE-338
  2.     ON EXCEPTION CONTINUE
  3. END-CALL.


USO ISTO:

Código COBOL:
  1.  WORKING-STORAGE SECTION.
  2.  01  ALOCALIZAR PIC X(255).
  3.  01  PT1    USAGE IS POINTER.
  4.  01  PT1-A  REDEFINES PT1 PIC S9(9) COMP-5.
  5.  01  PT2    USAGE IS POINTER.
  6.  01  PT2-A  REDEFINES PT2 PIC S9(9) COMP-5.
  7.  01  HWDS   PIC S9(9) COMP-5.
  8.  01  WS01-STR PIC X(100) VALUE SPACES.
  9.  
  10.  PROCEDURE DIVISION.
  11.  
  12.      MOVE SPACES TO ALOCALIZAR WS01-STR.
  13.      MOVE POW-TEXT OF txtJanela TO WS01-STR.
  14.      STRING WS01-STR DELIMITED BY " "
  15.             X"00"  DELIMITED BY SIZE
  16.             INTO ALOCALIZAR.
  17.      MOVE FUNCTION ADDR(ALOCALIZAR)  TO PT1.
  18.      SET PT2 TO NULL.
  19.      CALL "FindWindowA" WITH STDCALL USING BY VALUE PT2-A
  20.                                            BY VALUE PT1-A
  21.                                            RETURNING HWDS.
  22. * achou
  23.      MOVE SPACES TO WS01-STR.
  24.      IF HWDS > 0
  25.         STRING " SIM, localizou a aberta a JANELA = " DELIMITED BY SIZE
  26.                ALOCALIZAR DELIMITED BY " "
  27.                INTO WS01-STR
  28.         END-STRING
  29.         MOVE WS01-STR TO POW-TEXT OF txtMensagem
  30.      ELSE
  31. * nao achou
  32.         STRING " NÃO localizou, na memória a JANELA = " DELIMITED BY SIZE
  33.                ALOCALIZAR DELIMITED BY " "
  34.                INTO WS01-STR
  35.         END-STRING
  36.         MOVE WS01-STR TO POW-TEXT OF txtMensagem
  37.      END-IF.

Não esquecer de por nas opções de compilação: ALPHAL(WORD)
Joseg no ha iniciado sesión   Responder Con Cita
Ha dicho Gracias : 1
Armando (24 de agosto de 2017)
  #7
Antiguo 23 de agosto de 2017, 18:54
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
diciembre 2014
Madrid
36 años
15.06.2021 16:17
PROCEDURE DIVISION
Posts: 1.753
Enviado: 551
Recibido: 720
Soluiones: 94
Reputació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

Armando, creo que PowerCOBOL no permite el acceso a tal "profundidad" porque es un entorno orientado a eventos. Con lo cual, no veo una manera de interceptar dicho mensaje porque viene del Run-Time.

La alternativa sería comprobar la existencia de la DLL en tu código. O, en caso de los Form, mover el estado, según cookie, a una variable EXTERNAL compartida por todos los Forms.



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk no ha iniciado sesión   Responder Con Cita
Ha dicho Gracias : 1
Armando (24 de agosto de 2017)
Respuesta

Tags
closechild , cookie , evento , form , openform


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 17:09.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2021, Jelsoft Enterprises Ltd.