0
Amigos, aquí tenéis la creación de un ProgressBar en el PowerCOBOL 3:
Definimos 2 variables globales en la WORKING del SHEET:COBOL Código:
01 GLB-HWND-SHEET IS GLOBAL PIC S9(9) COMP-5. 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:COBOL Código:
ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 FUNC PIC X(50). 01 GWL-HINSTANCE PIC S9(9) COMP-5 VALUE -6. 01 tagINITCOMMONCONTROLSEX. 05 dwSize PIC S9(9) COMP-5 VALUE 8. 05 dwICC PIC S9(9) COMP-5 VALUE 32. 01 WS-STYLE PIC S9(9) COMP-5. 01 WS-CLASS PIC X(50). 01 WS-TEXT PIC X(50). 01 WS-HINSTANCE PIC S9(9) COMP-5. 01 WS-ERROR PIC S9(9) COMP-5. PROCEDURE DIVISION. MOVE POW-OFF TO POW-ACTIVATE OF TIMER1 CALL "GetActiveWindow" WITH STDCALL MOVE PROGRAM-STATUS TO GLB-HWND-SHEET MOVE "InitCommonControlsEx" TO FUNC CALL FUNC WITH STDCALL USING BY REFERENCE tagINITCOMMONCONTROLSEX MOVE 1342177280 TO WS-STYLE MOVE "msctls_progress32" & X"00" TO WS-CLASS MOVE X"00" TO WS-TEXT CALL "GetWindowLongA" WITH STDCALL USING BY VALUE GLB-HWND-SHEET BY VALUE GWL-HINSTANCE MOVE PROGRAM-STATUS TO WS-HINSTANCE CALL "CreateWindowExA" WITH STDCALL USING BY VALUE 0 BY REFERENCE WS-CLASS BY REFERENCE WS-TEXT BY VALUE WS-STYLE BY VALUE 50 *> POSICION X BY VALUE 50 *> POSICION Y BY VALUE 250 *> ANCHURA (width) BY VALUE 25 *> ALTURA (height) BY VALUE GLB-HWND-SHEET BY VALUE 0 *> HMENU (NO HAY MENU) BY VALUE WS-HINSTANCE BY VALUE 0 *> PUNTERO INNECESARIO MOVE PROGRAM-STATUS TO GLB-HWND-PRBAR IF GLB-HWND-PRBAR = ZEROS THEN CALL "GetLastError" WITH STDCALL MOVE PROGRAM-STATUS TO WS-ERROR DISPLAY "Error creacion ProgressBar: " WS-ERROR 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:COBOL Código:
CALL "SendMessageA" WITH STDCALL USING BY VALUE GLB-HWND-PRBAR 1029 0 0
Resultado en adjuntos.
Importante. En el fichero COBOL85.CBR añadimos:CODE Código:
[SHEET1.ENTRY] InitCommonControlsEx=ComCtl32.dll
Espero que os sirva el invento
Marcadores