Iniciar Sesión

Ver la Versión Completa : [Sintaxis] Desactivar la [X] de cerrar ventana


Ciro
28 de octubre de 2015, 04:10
Por favor me pueden ayudar. Necesito desactivar la X, de la ventana pero que deje habilitados los otros dos botones de minimizar y cambiar el tamaño.
He intentado en las propiedades de la forma en Style desactivar el controlbox, sí lo hace pero desactiva los tres botones. Gracias.

Kuk
28 de octubre de 2015, 10:24
Ciro, para qué necesitas deshabilitarlo? Si puedes controlarlo en el evento "OnClose", hay un campo en LINKAGE al cual si le mueves POW-FALSE no cierra el Form!

De todos modos se puede hacer por WinAPI, tengo un ejemplo en casa, intentaré pasártelo esta tarde.

Añadido despues de 2 horas 10 minutos
Ciro, pon este código en el evento "Opened" del Form donde quieres deshabilitar el botón de cerrar:


ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-HWND PIC S9(9) COMP-5.
01 WS-HWND-M PIC S9(9) COMP-5.
01 WS-HWND-P PIC S9(9) COMP-5.

PROCEDURE DIVISION.
MOVE "hwnd" OF POW-SELF TO WS-HWND

CALL "GetParent" WITH STDCALL USING BY VALUE WS-HWND
RETURNING WS-HWND-P
CANCEL "GetParent"

CALL "GetSystemMenu" WITH STDCALL USING BY VALUE WS-HWND-P POW-FALSE
RETURNING WS-HWND-M
CANCEL "GetSystemMenu"

CALL "DeleteMenu" WITH STDCALL USING BY VALUE WS-HWND-M
BY VALUE h"F060"
BY VALUE 0
CANCEL "DeleteMenu"

Ciro
28 de octubre de 2015, 13:09
Hola Kuk, en la forma no me sale el evento "OnClose". Sale el Evento "Close" y no tiene LINKAGE.

También coloque el código que me envia en el "Opened", pero sale unos errores, no se si es por lo que es WINAPI hay que hacer algun otro proceso?, ya que nunca he usado WINAPI.
Los errores son:
NI0201.obj : error LNK2001: unresolved external symbol _DELETEMENU@12
NI0201.obj : error LNK2001: unresolved external symbol _GETSYSTEMMENU@8
NI0201.obj : error LNK2001: unresolved external symbol _GETPARENT@4
D:\CONTABILIDAD\SYDWIN\Debug\CONTABILIDAD.exe : fatal error LNK1120: 3 unresolved externals
Muchas gracias

Kuk
28 de octubre de 2015, 13:26
Ciro, llevas razón, es "Close", pero debería llevar LINKAGE y un campo numérico en ella, donde puedes mover POW-TRUE, creo que se llama POW-ARG-CANCEL o algo así.

Qué versión de PowerCOBOL usas?

Para que te funcione el WinAPI, debes hacer click con el botón derecho en el TreeView del proyecto sobre el item llamado "Script", donde se reúnen los códigos COBOL que has codificado. En el menú que aparece elige "Options" (si no me equivoco), donde puedes definir opciones de compilación. En la pestaña COMPILE, en el campo que aparece pones lo siguiente:

ALPHAL(WORD)

Luego haces ReBuild de todo el proyecto. Si no compila dando errores de LINK diciendo que no encuentra las funciones del WinAPI como ahora, añade al proyecto USER32.LIB.