Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol Cocina Casera Cocina PowerCOBOL
Cocina PowerCOBOL Rutinas y ejemplos codificados por nuestros foreros.
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Sintaxis] Crear CSV JuanJuan77 PowerCOBOL (ActiveX, v4 - v11) 3 27 de septiembre de 2021 19:14
[Sintaxis] Crear un Menu Tommy2018% GnuCOBOL (OpenCOBOL) 3 25 de octubre de 2018 16:33
[Duda] Crear nuevo proceso Nitzer PowerCOBOL (ActiveX, v4 - v11) 1 8 de junio de 2016 16:53
[Duda] Crear archivo manifiest ¿?¿? Josber COBOL - General 10 22 de diciembre de 2015 07:59
[PowerCOBOL v3] Crear un ListView Kuk Cocina PowerCOBOL 1 19 de diciembre de 2015 21:10

Respuesta
 
Herramientas

  #1
Antiguo 9 de octubre de 2015, 17:05
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207
Like Crear un ProgressBar
2 Inactivo Inactivo

Amigos, aquí tenéis la creación de un ProgressBar en el PowerCOBOL 3:

Definimos 2 variables globales en la WORKING del SHEET:

Código COBOL:
  1.  01  GLB-HWND-SHEET  IS GLOBAL PIC S9(9) COMP-5.
  2.  01  GLB-HWND-PRBAR  IS GLOBAL PIC S9(9) COMP-5.

Para crear el ProgressBar se necesita el HWND del Sheet. Pero a diferencia del PowerCOBOL 9, el HWND no está disponible hasta que se cree realmente el Sheet (sea visible). Para ello ponemos un TIMER en el Sheet,para que el código se ejecute cuando el Sheet ya esté creado, (lo marcamos como activo ya en modo diseño), y en su único evento TIMER escribimos:

Código COBOL:
  1.  ENVIRONMENT DIVISION.
  2.  DATA        DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01  FUNC                   PIC X(50).
  5.  
  6.  01  GWL-HINSTANCE          PIC S9(9) COMP-5 VALUE -6.
  7.  
  8.  01  tagINITCOMMONCONTROLSEX.
  9.      05  dwSize             PIC S9(9) COMP-5 VALUE 8.
  10.      05  dwICC              PIC S9(9) COMP-5 VALUE 32.
  11.  
  12.  01  WS-STYLE               PIC S9(9) COMP-5.
  13.  01  WS-CLASS               PIC X(50).
  14.  01  WS-TEXT                PIC X(50).
  15.  
  16.  01  WS-HINSTANCE           PIC S9(9) COMP-5.
  17.  
  18.  01  WS-ERROR               PIC S9(9) COMP-5.
  19.  
  20.  PROCEDURE   DIVISION.
  21.          
  22.      MOVE POW-OFF TO POW-ACTIVATE OF TIMER1
  23.      
  24.      CALL "GetActiveWindow" WITH STDCALL
  25.      
  26.      MOVE PROGRAM-STATUS         TO GLB-HWND-SHEET    
  27.      MOVE "InitCommonControlsEx" TO FUNC
  28.      
  29.      CALL FUNC WITH STDCALL USING BY REFERENCE tagINITCOMMONCONTROLSEX
  30.      
  31.      MOVE 1342177280                  TO WS-STYLE
  32.      MOVE "msctls_progress32" & X"00" TO WS-CLASS
  33.      MOVE X"00"                       TO WS-TEXT
  34.      
  35.      CALL "GetWindowLongA" WITH STDCALL USING BY VALUE GLB-HWND-SHEET
  36.                                               BY VALUE GWL-HINSTANCE
  37.      
  38.      MOVE PROGRAM-STATUS TO WS-HINSTANCE
  39.      
  40.      CALL "CreateWindowExA" WITH STDCALL USING BY VALUE 0
  41.                                                BY REFERENCE WS-CLASS
  42.                                                BY REFERENCE WS-TEXT
  43.                                                BY VALUE WS-STYLE
  44.                                                BY VALUE 50  *> POSICION X
  45.                                                BY VALUE 50  *> POSICION Y
  46.                                                BY VALUE 250 *> ANCHURA (width)
  47.                                                BY VALUE 25  *> ALTURA (height)
  48.                                                BY VALUE GLB-HWND-SHEET
  49.                                                BY VALUE 0   *> HMENU (NO HAY MENU)
  50.                                                BY VALUE WS-HINSTANCE
  51.                                                BY VALUE 0   *> PUNTERO INNECESARIO
  52.      
  53.      MOVE PROGRAM-STATUS TO GLB-HWND-PRBAR
  54.      
  55.      IF  GLB-HWND-PRBAR = ZEROS THEN
  56.          CALL "GetLastError" WITH STDCALL
  57.          
  58.          MOVE PROGRAM-STATUS TO WS-ERROR
  59.          
  60.          DISPLAY "Error creacion ProgressBar: " WS-ERROR
  61.      END-IF

Para que nos tome apariencia moderna, en la misma carpeta del proyecto, ponemos el famoso fichero *.manifest y recompilamos.

Ya lo tenemos! Para hacer el "progress", usamos el siguiente código en cualquier lugar del Sheet donde lo hemos creado:

Código COBOL:
  1.      CALL "SendMessageA" WITH STDCALL USING BY VALUE GLB-HWND-PRBAR
  2.                                                      1029
  3.                                                      0
  4.                                                      0

Resultado en adjuntos.

Importante. En el fichero COBOL85.CBR añadimos:

Código:
[SHEET1.ENTRY]
InitCommonControlsEx=ComCtl32.dll
Espero que os sirva el invento

Miniatura de Adjuntos
Pulsar la imagen para la versión amplia
Nombre:  ProgressBar.png
Vistas: 226
Tamaño:  42,0 KB  



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 is offline   Responder Con Cita
  #2
Antiguo 21 de octubre de 2015, 20:00
Lecterman
Forero Junior
Última Actividad 31.08.2021 22:45
Posts Posts: 8
Likes enviados Enviados: 3
Likes recibidos Recibidos: 1

Hola Kuk!

Estoy trabajando con PWC7, copie tu código y funciona muy bien.
Surge una duda a la hora de utilizar el archivo .manifest, como lo hago referencia a el desde mi proyecto. :confused:

Desde ya gracias.
Lecterman is offline   Responder Con Cita
  #3
Antiguo 21 de octubre de 2015, 23:41
Fito
Guardián del Foro
Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros Guardián del Foro: Guardián del espíritu y clima del Foro - Issue reason: Por el Avatar Activista del Foro: Activista del Foro - Issue reason: Por aportar ideas 
Última Actividad 19.09.2026 13:19
Posts Posts: 458
Likes enviados Enviados: 267
Likes recibidos Recibidos: 243

Hola Lecterman,

yo trabajo en power8, ya trae un objeto progress, y si mal no recuerdo el 7 también.

Saludos.

Fito...
Fito is offline   Responder Con Cita
  #4
Antiguo 22 de octubre de 2015, 18:10
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

Lecterman, que yo sepa el ProgressBar viene en el paquete de controles de Power 7 y no hay necesidad de crearlo en dinámico.

En cuanto al archivo Manifest, échale un ojo aquí: COBOL Foro - Ver Mensaje Individual - [Aporte] Run-Times y Merge-Modules v9.0



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 is offline   Responder Con Cita
  #5
Antiguo 22 de octubre de 2015, 21:16
Lecterman
Forero Junior
Última Actividad 31.08.2021 22:45
Posts Posts: 8
Likes enviados Enviados: 3
Likes recibidos Recibidos: 1

Si si, pero me pareció interesante usar las clases que provee Windows para que el formulario asuma el "tema" del Windows donde esta corriendo.


Muchas gracias por tu respuesta!
Lecterman is offline   Responder Con Cita
  #6
Antiguo 22 de octubre de 2015, 22:52
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

Lecterman, de nada hombre, para eso estamos, para ayudarnos y compartir opiniones!

Lo del tema de Windows depende del archivo *.manifest, es decir, si no lo metemos en la misma carpeta, haciendo todo lo mismo, tendría apariencia clásica de Windows. O sea que, siempre y cuando la WndProc del control derive de los estándares de las clases de Windows, el archivo *.manifest funciona y aplica la apariencia de los controles de Windows de la versión 6.x

En cuanto al modo de crearlo, es programación Win32 estándar (el invocar las clases de Windows para crear controles), en los IDE-s de C++ por ejemplo se hace todo lo igual pero escribiéndolo en C++. EN visual Studio por ejemplo si creas un proyecto Win32 tienes que hacerlo todo por código. El proyecto visual es del tipo "Windows 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 is offline   Responder Con Cita
  #7
Antiguo 3 de noviembre de 2015, 16:41
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

Reitero que InitCommonControlsEx no es necesario en Windows 7, al menos habiendo el fichero Manifest. Con lo cual, podéis omitir todo lo relacionado con dicha función.



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 is offline   Responder Con Cita
  #8
Antiguo 19 de diciembre de 2015, 21:25
Galileo
Forero Junior
Última Actividad 22.01.2021 11:39
Posts Posts: 38
Likes enviados Enviados: 20
Likes recibidos Recibidos: 41

Otro buen aporte. En 2003, cuando empezaba a jugar con PowerCOBOL 3.0, también eché a faltar este tipo de control, así que pergeñé unos cuantos con los que tenía PWC. Hice un programa de demostración y lo colgué en la sección Rutinas de ESCOBOL (http://www.escobol.com/modules.php?n...p=getit&lid=73. En el año 2006 añadí otros más, pero esa modificación la perdí. Sin embargo, conservo un pantallazo de la misma. http://galileano.tripod.com/powercobol/progreso.jpg

Pulsar la imagen para la versión amplia
Nombre:  progreso.jpg
Vistas: 4
Tamaño:  27,0 KB
Galileo is offline   Responder Con Cita
  #9
Antiguo 19 de diciembre de 2015, 23:29
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

Galileo, el pantallazo no se ve, corrige el enlace o cuélago directamente en el foro.



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 is offline   Responder Con Cita
  #10
Antiguo 20 de diciembre de 2015, 10:59
Galileo
Forero Junior
Última Actividad 22.01.2021 11:39
Posts Posts: 38
Likes enviados Enviados: 20
Likes recibidos Recibidos: 41

Juraría que lo probé ayer y funcionaba. En fin, aquí está.

Miniatura de Adjuntos
Pulsar la imagen para la versión amplia
Nombre:  mxcpprogreso.jpg
Vistas: 150
Tamaño:  27,0 KB  
Galileo is offline   Responder Con Cita
Respuesta



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

Saltar a Foro


La franja horaria es GMT +2. Ahora son las 13:58.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.