Resultados 1 al 7 de 7

Tema: Controlar si un Form ya está abierto

  1. #1
      Acabo de llegar...
    A

    Registrado
    febrero de 2015
    Ubicación
    Montevideo
    Edad
    64
    Mensajes
    27
    Última visita
    Ayer a las 19:59

    Agradecimientos
     
    Recibidos
    14
    Enviados
    3

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

    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

    0 Not allowed!

  2. #2
      Gran amigo y Guru de COBOL
    Avatar de Rapinto

    Registrado
    febrero de 2015
    Ubicación
    Porto
    Mensajes
    246
    Última visita
    29.01.2018

    Agradecimientos
     
    Recibidos
    225
    Enviados
    19

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

    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

    0 Not allowed!

  3. #3
      Forero
    Avatar de Dasije

    Registrado
    noviembre de 2015
    Ubicación
    Jerez De La Frontera (cádiz)
    Mensajes
    182
    Última visita
    06.03.2022

    Agradecimientos
     
    Recibidos
    79
    Enviados
    1

    Citaciones y menciones
     
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    15

    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.

    0 Not allowed!
    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

  4. #4
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    37
    Mensajes
    2,084
    Última visita
    Ayer a las 17:02

    Agradecimientos
     
    Recibidos
    906
    Enviados
    782

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

    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:

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

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

    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
    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.

    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
      Acabo de llegar...
    A

    Registrado
    febrero de 2015
    Ubicación
    Montevideo
    Edad
    64
    Mensajes
    27
    Última visita
    Ayer a las 19:59

    Agradecimientos
     
    Recibidos
    14
    Enviados
    3

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

    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)

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

    0 Not allowed!

  6. #6
      Senior
    Avatar de Joseg

    Registrado
    abril de 2015
    Mensajes
    281
    Última visita
    25.11.2022

    Agradecimientos
     
    Recibidos
    122
    Enviados
    73

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

    Predeterminado

    Cita Iniciado por 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)

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


    USO ISTO:

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

    0 Not allowed!

  7. #7
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    37
    Mensajes
    2,084
    Última visita
    Ayer a las 17:02

    Agradecimientos
     
    Recibidos
    906
    Enviados
    782

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

    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.

    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] Detectar la inactividad en un Form
    Por Hrmcobol en el foro PowerCOBOL (ActiveX, v4 - v11)
    Respuestas: 4
    Último Mensaje: 16.07.2016, 15:04
  2. [Información] Verificar si Excel (Office) está instalado
    Por Joseg en el foro PowerCOBOL (ActiveX, v4 - v11)
    Respuestas: 3
    Último Mensaje: 16.03.2016, 16:00
  3. [Sintaxis] Modificar Propiedades de un FORM
    Por Recato53 en el foro PowerCOBOL (ActiveX, v4 - v11)
    Respuestas: 11
    Último Mensaje: 05.06.2015, 10:20

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
  •