En mis programas tengo los mensajes del sistema personalizados. De esta manera controlo que mis programas siempre muestren los típicos mensajes de confirmación, información, alerta y parada de la misma manera en todas las versiones de Windows. También uso mis propios iconos para los mensajes, sacados de las colecciones de iconexperience que uso también en mis programas. De esta manera consigo uniformidad en los programas.
En Windows Vista los mensajes del sistema presentan un aspecto distinto a las anteriores versiones de Windows. Además de los iconos característicos de la nueva versión de Windows, el formulario está visualmente dividido en dos zonas, la de arriba es blanca y contiene el icono y el texto del mensaje, mientras que la parte de abajo es del color habitual del formulario y contiene el botón o botones del mismo.Con FWH es fácil hacer un formulario de estas características usando el control Pages. No hay más que definir el formulario con un control pages donde va la zona blanca y luego crear otro formulario que se solapará encima del anterior. La definición del formulario principal en el fichero RC es de la siguiente manera:
UT_INFO DIALOG DISCARDABLE 29, 34, 206, 88 STYLE WS_POPUP|DS_MODALFRAME|WS_CAPTION|WS_SYSMENU CAPTION "Cuaderno de Bitácora" FONT 8, "Ms Sans Serif" { CONTROL "&Aceptar", IDOK, "Button", BS_DEFPUSHBUTTON|WS_TABSTOP, 144, 66, 50, 16 CONTROL "", 110, "Static", SS_WHITERECT, 0, 0, 206, 60 }
El control que va a contener el control page es el identificado con 110. La definición del formulario que va dentro del control Page del formulario principal es como sigue:
UT_INFO_PAGE DIALOG DISCARDABLE 77, 112, 203, 60 STYLE WS_CHILD|WS_CLIPCHILDREN FONT 8, "MS Sans Serif" { CONTROL "", 10, "Static", WS_GROUP, 48, 8, 142, 44 CONTROL "", 111, "TBitmap", 0x00000000, 8, 4, 36, 36 }
El código de la función que muestra el formulario es el siguiente:
FUNCTION msginfo(cText, cCaption) LOCAL oDlgInfo, oPage LOCAL oBmp DEFAULT cCaption := oApp():cAppName+oApp():cVersion DEFINE DIALOG oDlgInfo RESOURCE "UT_INFO" TITLE cCaption oDlgInfo:oFont := oApp():oFont REDEFINE PAGES oPage ID 110 OF oDlgInfo ; DIALOGS "UT_INFO_PAGE" oPage:oFont := oApp():oFont REDEFINE SAY PROMPT cText ID 10 OF oPage:aDialogs[1] REDEFINE BITMAP oBmp ID 111 OF oPage:aDialogs[1] RESOURCE "xpinfo" TRANSPARENT REDEFINE BUTTON ID IDOK OF oDlgInfo ; ACTION oDlgInfo:End() ACTIVATE DIALOG oDlgInfo ; ON INIT oDlgInfo:Center( oApp():oWndMain ) RETURN Nil
con lo que conseguimos un formulario como el siguiente:
Una solución sencilla y elegante. ¿Los botones son los nativos?
Si, son los de Windows Vista.Saludos,