Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL v3 (V3L10, Win32) (https://www.cobolforo.es/forumdisplay.php?f=5)
-   -   [Sintaxis] Modificar El Font en un Menu (https://www.cobolforo.es/showthread.php?t=1385)

Fabio 18 de octubre de 2021 15:30

Modificar El Font en un Menu
 
Estimados Companeros de forum es possible modificar el tamaño del font de un menu he buscado como hacerlo y no se.
Gracias.

Kuk 18 de octubre de 2021 16:07

@Fabio, tienes que pasar por WinAPI.

Tienes que obtener el Handle del Menú: GetMenu function (winuser.h) - Win32 apps | Microsoft Docs

Luego recuperar las propiedades del menú: GetMenuInfo function (winuser.h) - Win32 apps | Microsoft Docs
Lo tienes que hacer en la siguiente estructura de datos: MENUINFO (winuser.h) - Win32 apps | Microsoft Docs

Luego cambias el valor de cbSize y vuelves a setear el menú: SetMenuInfo function (winuser.h) - Win32 apps | Microsoft Docs

Fabio 19 de octubre de 2021 18:45

Muchas Gracias Kuk pero tengo un problema y es que no se utilizar las api donde me pierdo es en definer los parametros de entrada de la function.

Kuk 21 de octubre de 2021 12:05

@Fabio,

Código COBOL:
  1.  ENVIRONMENT DIVISION.
  2.  DATA        DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  
  5.  01  HWND-SHEET            PIC S9(9) COMP-5.
  6.  01  HWND-MENU             PIC S9(9) COMP-5.
  7.  
  8.  01  MENUINFO.
  9.      05  cbSize            PIC S9(9) COMP-5.
  10.      05  fMask             PIC S9(9) COMP-5.
  11.      05  dwStyle           PIC S9(9) COMP-5.
  12.      05  cyMax             PIC  9(9) COMP-5.
  13.      05  hbrBack           PIC S9(9) COMP-5.
  14.      05  dwContextHelpID   PIC S9(9) COMP-5.
  15.      05  dwMenuData        PIC  9(9) COMP-5.
  16.      
  17.  PROCEDURE   DIVISION.
  18.  
  19.      CALL "GetActiveWindow" WITH STDCALL *> User32.lib
  20.      
  21.      MOVE PROGRAM-STATUS TO HWND-SHEET
  22.      
  23.      CALL "GetMenu" WITH STDCALL USING BY VALUE HWND-SHEET *> User32.lib
  24.  
  25.      MOVE PROGRAM-STATUS TO HWND-MENU
  26.      
  27.      CALL "GetMenuInfo" WITH STDCALL USING BY VALUE HWND-MENU
  28.                                            BY REFERENCE MENUINFO *> User32.lib
  29.                                            
  30.      ADD 5 TO cbSize *> <----- aqui es donde modificamos el tamaño
  31.      
  32.      CALL "SetMenuInfo" WITH STDCALL USING BY VALUE HWND-MENU
  33.                                            BY REFERENCE MENUINFO *> User32.lib

No olvides de añadir al proyecto la User32.lib

---------- Post añadido el 21 de octubre de 2021 a las 11:08 ----------

@Fabio, ya nos dirás si ha funcionado ;)

Fabio 23 de octubre de 2021 15:14

Kuk disculpa la demora pero tenia problemas con mi internet y si lo probe y me devuelve un valor handle del menu pero la function getmenuinfo no me retorna ningun valor en los parametron.

Kuk 24 de octubre de 2021 01:47

@Fabio, pues me he equivocado macho. Es lo que pasa siempre que andamos con prisas, mea culpa amigo.

Por lo pronto las funciones GetMenuInfo y SetMenuInfo sólo aparecen en Windows 10. Con lo cual, no existen en la User32.lib que trae PowerCOBO:

[TABLE]
Minimum supported client |Windows 2000 Professional [desktop apps only]
Minimum supported server |Windows 2000 Server [desktop apps only]
Target Platform |Windows
Header |winuser.h (include Windows.h)
Library |User32.lib
DLL |User32.dll
API set |ext-ms-win-ntuser-menu-l1-1-3 (introduced in Windows 10, version 10.0.14393)
[/TABLE]

Además, según me he documentado, podemos jugar con varias cosas, pero no con el tamaño del texto, porque este viene de los parámetros generales de Windows...

La única opción es cambiarlo a nivel de parámetros de Windows o pasar por OwerDraw (dibujarlo en "custom"): Change System Menu Text Size

Fabio 24 de octubre de 2021 17:04

Kuk una ultima pregunta y perdoname la insistencia he leido un post tuyo titulado call a cualquier DLL sin lib ni loadlibrary en powercobol podria ser esta una possible solucion?.
saludos,

Kuk 24 de octubre de 2021 22:00

@Fabio, efectivamente se puede hacer esto añadiendo las líneas correspondientes en el fichero COBOL85.CBR de la manera siguiente:

Código:

[SHEET1.Entry]
GetMenuInfo=User32.dll
SetMenuInfo=User32.dll

Lo que pasa es que en cuanto al asunto de cambiar el tamaño de la fuente del menú, no se puede hacer.
O lo cambias en los parámetros de Windows, o nos vamos a las historias "OwerDraw" que es dibujarlo tu mismo mediante la API de Windows.


La franja horaria es GMT +2. Ahora son las 01:28.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.