Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol Fujitsu COBOL PowerCOBOL v3 (V3L10, Win32)
PowerCOBOL v3 (V3L10, Win32) IDE Freeware compatible con Windows 7/8/10/11
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Sintaxis] Problema en el evento "Return" en TextBox (CmEdit) dmosca PowerCOBOL (ActiveX, v4 - v11) 8 3 de agosto de 2017 23:40
[Duda] Error "impresora en uso" al cambiar de Form dmosca PowerFORM 2 20 de abril de 2017 16:44
[Sintaxis] Filtro con CmEdit y evento "change" Roger PowerCOBOL (ActiveX, v4 - v11) 4 26 de febrero de 2017 14:09
[Sintaxis] Obtener la propiedad "Name" del Form en ejecución Fito PowerCOBOL (ActiveX, v4 - v11) 4 19 de julio de 2016 00:47
[PowerCOBOL v3] Añadir evento "Resized" al SHEET Kuk Cocina PowerCOBOL 0 22 de diciembre de 2015 16:32

Respuesta

  #1
Antiguo 21 de julio de 2015, 13:50
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207
Pregunta Evento "Resized" del Form (Sheet)
0 Inactivo Inactivo

Hola compis, acabo de darme cuenta que el PowerCOBOL v3 no tiene evento "Resized" en sus Forms. ¿Cómo lo gestionáis? He pensado de meter un Timer, pero a lo mejor existen otras soluciones?

Otra posibilidad sería hacer subclassing del Form via WinAPI pero por ejemplo la versión 9 no acepta CALL BY VALUE entre funciones COBOL, la versión diría yo que es más cercana a la construcción de ventana clásico de C++ así que lo mismo un día lo pruebo.

Volviendo a la pregunta en si, cómo lo apañáis vosotros?



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 27 de julio de 2015, 14:16
Adrianeloy
Forero Junior
Última Actividad 24.11.2020 17:31
Posts Posts: 39
Likes enviados Enviados: 29
Likes recibidos Recibidos: 34

Yo tuve que hacer este "remedio" casero:
En propiedades de la ventana, le quité los "Style" Minimize, Maximize y Control.
Agregue arriba y a la izquierda de la ventana 3 imagenes de creación propia de "minimizar", "maximizar" y "cerrar".

Al hacer click en "minimizar" ejecuto:
Código COBOL:
  1. CALL SHOWSHEET OF SHEET1 USING POW-SWSHOWMINIMIZED.

Al hacer click en "cerrar" ejecuto:
Código COBOL:
  1. CALL CLOSESHEET OF SHEET1.

Eso es sencillo, solo se complica en el proceso que ejecutas en "maximizar".
Para esto uso un CHECK oculto llamado MAXIMIZA, asi se si estoy en modo maximizado o normal.

Código COBOL:
  1.       IF POW-CHECK OF MAXIMIZA = POW-OFF
  2.        CALL SHOWSHEET OF SHEET1 USING POW-SWSHOWMAXIMIZED
  3.        MOVE POW-ON TO POW-CHECK OF MAXIMIZA.

Código COBOL:
  1.      IF POW-CHECK OF MAXIMIZA = POW-ON
  2.        CALL SHOWSHEET OF SHEET1 USING POW-SWSHOWNORMAL
  3.        MOVE POW-OFF TO POW-CHECK OF MAXIMIZA.

Tener en cuenta que al cambiar la ventana, la posicion de las 3 imagenes quedaran descolocadas.
Asi que hay que leer la posicion de la ventana para obtener su ancho actual, restarle
los "pixeles" del ancho de la imagen "cerrar" y moverle ese valor a la posicion horizontal de la imagen.
Luego haremos lo mismo con la imagen de "maximizar", restandole los pixeles del ancho de "cerrar" + lo de "maximizar".
Y finalemente lo mismo con la imagen de "minimizar", restandolo los anchos de las 3 imagenes.

Complicado y muchas vueltas? No tanto. Peor es implementar la alternativa a la opcion "Resize".
Para eso, tenes que llamar a un procedure que lee la posicion y tamaño de cada boton, pic, label, edit, tabla... que tenes en la ventana, uno por uno, y aplicarle un porcentaje para agrandar o reducir su tamaño actual. (Y tambien a su tipo de letra!)
Es un laburo de hormiga pero es la unica forma que encontre en power cobol V3.
Si queres un ejemplo lo preparo un poco y lo subo...
Espero que te sirva.
Adrianeloy is offline   Responder Con Cita
  #3
Antiguo 27 de julio de 2015, 14:49
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

Adrianeloy, usa el resalto de código que hay en el editor, en este caso COBOL.

Lo que dices no es precisamente lo que quiero hacer. En realidad, si haces lo mismo que los botones nativos, no entiendo por qué los quitas y lo haces todo a mano?

Yo a lo que me refiero es al evento en sí. Cuando quieres hacer Form de dimensiones variables, en PowerCOBOL 9 sea marcas la casilla "Scallable", sea recalculas las posiciones como bien dices en tu post (que mejor recalcular, lo de Scallable no me mola mucho...). El problema es que "Resized" es un evento, es decir reside en el bucle WndProc, y cuando el SO envía el message WM_SIZE es cuando se ejecuta el código que metas (el de calculo de posiciones y etc). Pero en PowerCOBOL 3 el WndProc de la ventana (que evidentemente no está disponible para nosotros) no controla este mensaje.

Se puede hacer SubClassing del WndProc haciendo una DLL en C++, o meter un Timer que controle el cambio de dimensiones. Pero pensaba que a lo mejor la gente que más lo ha usado tiene otra solución más simple. Como por ejemplo, yo no sabía que la propiedad "hwnd" de los controles nativos de PowerCOBOL 9 están simplemente ocultos pero accesibles en todo momento.



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
  #4
Antiguo 27 de julio de 2015, 16:48
Adrianeloy
Forero Junior
Última Actividad 24.11.2020 17:31
Posts Posts: 39
Likes enviados Enviados: 29
Likes recibidos Recibidos: 34

Agregué las imagenes como un medio de detectar que se pulsó "maximizar" y poder reescalar todo, porque no encontré otra manera de detectar ese evento en PowerCobol V3.
Adrianeloy is offline   Responder Con Cita
  #5
Antiguo 27 de julio de 2015, 17:09
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

Adrianeloy, el evento del que hablo, es cuando un Form no está minimizado ni maximizado sino redimensionado por el usuario con el ratón. Ese mismo evento pasa al maximizar y minimizar, es verdad, pero si el Form es redimensionable, el usuario puede cambiar el tamaño sin maximizar.



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
Respuesta


Herramientas

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 14:49.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.