Página 2 de 4 PrimerPrimer 1 2 3 4 ÚltimoÚltimo
Resultados 11 al 20 de 34

Tema: Ventanas Flotantes

  1. #11
      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, de nada hombre, para eso estamos

    En cuanto a lo de los hilos, es perfectamente posible. Había un ejemplo de Rapinto por ahí en el foro.

    En todo caso, la mecánica sería de crear un Thread vía WinAPI, declarar un PROCEDURE-POINTER, hacerle un

    COBOL Código:
    1.      SET MI-PROCEDURE-POINTER TO ENTRY "NOMBRE_PROCEDURE"

    Y pasar MI-PROCEDURE-POINTER redefinido en PIC S9(9) COMP-5 al Thread creado.

    Ando mal de tiempo, pero intento hacer un ejemplo mañana

    Aunque lo más fácil es usar CmTimer-s, porque cada uno crea un hilo detrás. Es decir, poner un CmTimer en el Form, poner en su evento el código que queramos, y lo primero lo que debemos hacer es parar el timer dentro de ese código. Y para invocarlo, simplemente activar 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.

  2. #12
      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

    Kuk, sin prisas, si pasas un ejemplo, te estaré eternamente agradecido

    Como sabes yo siempre utilizo OPENFORM, es decir que desde el menu, cualquier usuario puede tener todas las ventanas que quiera abiertas, obviamente de programas distintos, pero claro, cuando lanzo una consulta que tarda deja todo el programa "no responde"

    Gracias como siempre por todo.

    0 Not allowed!

  3. #13
      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, estoy en ello, ¡lo prometido es deuda!

    Lo que pasa es que lo estoy haciendo desde 0 porque no encontré el ejemplo del que hablaba y no tengo tiempo ni para estornudar...

    Sólo para enseñarte mis avances, de momento no funciona bien:

    COBOL Código:
    1.  ENVIRONMENT     DIVISION.
    2.  DATA            DIVISION.
    3.  WORKING-STORAGE SECTION.
    4.  01  RESP                       PIC S9(9) COMP-5.
    5.  01  SECURITY-DESCRIPTOR.
    6.      05  Revision               PIC X(1).
    7.      05  Sbz1                   PIC X(1).
    8.      05  sControl               PIC S9(4) COMP-5. *> SECURITY_DESCRIPTOR_CONTROL
    9.      05  sOwner                 PIC S9(9) COMP-5.
    10.      05  sGroup                 PIC S9(9) COMP-5.
    11.      05  Sacl                   PIC S9(9) COMP-5.
    12.      05  Dacl                   PIC S9(9) COMP-5.
    13.  
    14.  01  lpdwRevision               PIC S9(9) COMP-5.
    15.  
    16.  01  SECURITY-ATTRIBUTES.
    17.      05  nLength                PIC S9(9) COMP-5. *> The size, in bytes, of this structure
    18.      05  lpSecurityDescriptor   POINTER. *> A pointer to a SECURITY_DESCRIPTOR structure    
    19.      05  bInheritHandle         PIC 9(2) COMP-5.  *> A Boolean value that specifies whether the returned handle is inherited when a new process is created.
    20.  
    21.  01  dwStackSize                PIC 9(9) COMP-5. *> The initial size of the stack, in bytes. The system rounds this value to the nearest page. If this parameter is zero, the new thread uses the default size for the executable.
    22.  01  lpStartAddress             PROCEDURE-POINTER.
    23.  01  R-lpStartAddress REDEFINES lpStartAddress PIC 9(9) COMP-5.
    24.  
    25.  01  lpParameter                PIC 9(9) COMP-5.
    26.  01  dwCreationFlags            PIC 9(9) COMP-5. *> if 0 - The thread runs immediately after creation.
    27.  01  lpThreadId                 PIC 9(9) COMP-5. *> A pointer to a variable that receives the thread identifier.
    28.  PROCEDURE       DIVISION.
    29.      
    30.      MOVE POW-FALSE TO "Enabled" OF CmCommand1
    31.      
    32.      *>Advapi32.lib
    33. *    CALL "GetSecurityDescriptorControl" WITH STDCALL USING BY REFERENCE SECURITY-DESCRIPTOR
    34. *                                                           BY REFERENCE sControl
    35. *                                                           BY REFERENCE lpdwRevision
    36. *                                                           RETURNING RESP
    37.      
    38.      CALL "InitializeSecurityDescriptor" WITH STDCALL USING BY REFERENCE SECURITY-DESCRIPTOR
    39.                                                             BY VALUE 1
    40.                                                             RETURNING RESP
    41.      
    42.      IF  RESP = ZEROS
    43.          CALL "GetLastError" WITH STDCALL RETURNING RESP
    44.          
    45.          DISPLAY "ERROR GetSecurityDescriptorControl, RC: " RESP            
    46.          
    47.          EXIT PROGRAM
    48.      END-IF
    49.      
    50.      MOVE LENGTH OF SECURITY-ATTRIBUTES TO nLength
    51.      
    52.      SET lpSecurityDescriptor TO ADDRESS OF SECURITY-DESCRIPTOR
    53.      
    54.      MOVE H"00" TO bInheritHandle
    55.      MOVE 0     TO dwStackSize
    56.      
    57.      SET lpStartAddress TO ENTRY "RUTINA@0"
    58.      
    59.      MOVE 0 TO lpParameter
    60.      
    61.      *> Kernel32.lib
    62.      CALL "CreateThread" WITH STDCALL USING BY REFERENCE SECURITY-ATTRIBUTES
    63.                                             BY VALUE dwStackSize
    64.                                             BY VALUE R-lpStartAddress
    65.                                             BY REFERENCE lpParameter
    66.                                             BY VALUE dwCreationFlags
    67.                                             BY REFERENCE lpThreadId
    68.                                             RETURNING RESP
    69.                                            
    70.      IF  RESP = ZEROS
    71.          CALL "GetLastError" WITH STDCALL RETURNING RESP
    72.          
    73.          DISPLAY "ERROR CreateThread, RC: " RESP            
    74.          
    75.          EXIT PROGRAM
    76.      END-IF
    77.      
    78.      PERFORM 10 TIMES
    79.          INVOKE CmList1 "AddString" USING "¡Este es el Thread del Form!"
    80.      
    81.          CALL "Sleep" WITH STDCALL USING BY VALUE 1000
    82.      END-PERFORM                            


    ---------- Post añadido : 21:59 ---------- Post anterior : 22:42 ----------

    @Nitzer, malas noticias. Es posible hacerlo en COBOL, pero no en Fujitsu, porque el último no trabaja con parámetros BY VALUE. Es decir, necesitaríamos algo como esto:

    COBOL Código:
    1.  IDENTIFICATION DIVISION.
    2.  PROGRAM-ID. "RUTINA".
    3.  
    4.  DATA DIVISION.
    5.  LINKAGE SECTION.
    6.  01  P-THREAD            POINTER.
    7.  PROCEDURE DIVISION WITH STDCALL LINKAGE USING BY VALUE P-THREAD.
    8.  

    Y parece ser que la función que pasamos a la hora de crear el nuevo Thread lo necesita para poder gestionarlo:

    CPP Código:
    1. DWORD WINAPI mythread(LPVOID lpParameter){

    Así que, lo que se podría intentar es pasar por una pasarela en C (crear une DLL intermediaria). Pero para probar esto necesito aún más tiempo. No sé cuándo lo voy a poder hacer.

    Así que de momento te propongo que pruebes la otra solución de usar Timers como funciones en un Thread separado, a mi me ha funcionado de maravilla.

    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.

  4. #14
      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

    Kuk, tranquilo, no quiero quitarte mas tiempo )

    Eternamente agradecido por el trabajo que haces por todos nosotros.

    NO es algo que me quite la vida.

    MIs compañeros ya están con .NET C# a tope y poco a poco iré programando menos yo y mas ellos.

    Me voy a dedicar mas a pensar (análisis), la empresa no para de crecer y no me queda otra.

    0 Not allowed!

  5. #15
      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, ¡¡¡¡¡¡¡ Lo conseguí !!!!!!!!! Y sin pasarelas ni ostias. Puro Fujitsu COBOL.

    El código mágico: (dejo el proyecto entero en adjuntos)

    IMPORTANTE: si haces DISPLAY, tienes que hacer el primero en el Thread el Form, luego haces el resto en el nuevo Thread.

    COBOL Código:
    1.  ENVIRONMENT     DIVISION.
    2.  DATA            DIVISION.
    3.  WORKING-STORAGE SECTION.
    4.  01  RESP                       PIC S9(9) COMP-5.
    5.  01  lpStartAddress             PROCEDURE-POINTER.
    6.  01  R-lpStartAddress REDEFINES lpStartAddress PIC 9(9) COMP-5.
    7.  01  lpParameter                PIC 9(9) COMP-5.
    8.  01  lpThreadId                 PIC 9(9) COMP-5 VALUE 0.
    9.  
    10.  01  CAMPO       PIC X(20) IS EXTERNAL.
    11.  PROCEDURE       DIVISION.
    12.      
    13.      DISPLAY "Vamos allá..."
    14.      
    15.      MOVE "Hola desde el Form!" TO CAMPO
    16.      
    17.      MOVE POW-FALSE TO "Enabled" OF CmCommand1
    18.      
    19.      SET lpStartAddress TO ENTRY "RUTINA@0"
    20.          
    21.      *> Kernel32.lib
    22.      CALL "CreateThread" WITH STDCALL USING BY VALUE 0
    23.                                             BY VALUE 0
    24.                                             BY VALUE R-lpStartAddress
    25.                                             BY REFERENCE lpParameter
    26.                                             BY VALUE 0
    27.                                             BY REFERENCE lpThreadId
    28.                                             RETURNING RESP
    29.                                            
    30.      IF  RESP = ZEROS
    31.          CALL "GetLastError" WITH STDCALL RETURNING RESP
    32.          
    33.          DISPLAY "ERROR CreateThread, RC: " RESP            
    34.          
    35.          EXIT PROGRAM
    36.      END-IF

    COBOL Código:
    1.  IDENTIFICATION DIVISION.
    2.  PROGRAM-ID. "RUTINA".
    3.  
    4.  DATA DIVISION.
    5.  WORKING-STORAGE SECTION.
    6.  01  CAMPO       PIC X(20) IS EXTERNAL.
    7.  PROCEDURE DIVISION WITH STDCALL LINKAGE.
    8.  
    9.      PERFORM 10 TIMES
    10.          DISPLAY "¡¡¡Este es un nuevo Thread!!! Valor recibido: " CAMPO
    11.      
    12.          CALL "Sleep" WITH STDCALL USING BY VALUE 1000
    13.      END-PERFORM
    14.      
    15.      DISPLAY "ADIÓS"
    16.      
    17.      CALL "Sleep" WITH STDCALL USING BY VALUE 1000
    18.      
    19.      GOBACK
    20.      .
    21.  
    22.  END PROGRAM "RUTINA".
    Ficheros adjuntos Ficheros adjuntos

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



    Maravilloso, voy a intentar comprender el código y probarlo.
    No hay palabras para semejante trabajo )))

    0 Not allowed!

  7. #17
      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, mantennos al corriente, lógicamente lo he probado pero siempre se te puede escapar algo.

    Además, me parece un tema interesante, si el código te parece comprensible o no.


    P.D. Sinceramente, nuestro foro me parece el más rico en código "oro" del mundo entero. Al menos de los que yo conozco, incluyendo los que están en inglés.
    Quiero decir, tenemos ejemplos que no he visto nunca en ningún otro sitio.

    ---------- Post añadido : 16:01 ---------- Post anterior : 21:40 ----------

    Por si a alguien les interesa cómo hacerlo vía Timer: [Componente] ctList de Dbi Tech - Problema con el Font... - COBOL Foro

    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.

  8. #18
      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, ¿qué tal, lo has probado?

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

    Cita Iniciado por Kuk Ver Mensaje
    @Nitzer, ¿qué tal, lo has probado?
    Hola Kuk, aún no he podido, estoy con un proyecto complejo, pero te prometo que lo voy a hacer, a comprender y a poner aquí la experiencia

    Ya puestos te cuento el proyecto con el que estoy full-time

    Mejor, mañana tiro fotos y os lo cuento.

    0 Not allowed!

  10. #20
      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, has podido hacerlo o de momento nada?

    Estoy intrigado, verlo en acción sería un placer la verdad

    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.

Página 2 de 4 PrimerPrimer 1 2 3 4 ÚltimoÚltimo

Información de Tema

Usuarios Viendo este Tema

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

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
  •