Ver Mensaje Individual
  #1
Antiguo 9 de octubre de 2015, 17:05
Kuk
Administrador
Última Actividad 21.09.2026 18:24
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
Imágenes Adjuntas
 



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