VFP - MessageBox Transparente

Instrucciones, copiar el código en un archivo prg y ejecutarlo; espero les sea de utilidad.
Saludos
Denny Infante
#
DEFINE GWL_EXSTYLE -20#
DEFINE WS_EX_LAYERED 0x00080000DECLARE INTEGER
FindWindow IN WIN32API STRING cClassName, STRING cWindNameDECLARE INTEGER
SetLayeredWindowAttributes IN user32 INTEGER hwnd, INTEGER crKey, SHORT bAlpha, INTEGER dwFlagsDECLARE INTEGER
SetWindowLong IN user32 INTEGER hWnd, INTEGER nIndex, INTEGER dwNewLongDECLARE INTEGER
GetWindowLong IN user32 INTEGER hWnd, INTEGER nIndexDECLARE INTEGER MessageBox IN
user32 As MessageBoxA INTEGER hwnd, STRING lpText, STRING lpCaption, INTEGER wType*!* Cómo usarlo
LOCAL
oMsg, lRetoMsg =
CREATEOBJECT('MsgBoxTransparent')lRet = oMsg.
Show('Denny Infante')*!* Utilizando parámetros
*!* Definir título del MessageBox
*!* **************************************
*!* oMsg = CREATEOBJECT('MsgBoxTransparent', "Nuevo Título")
*!*
*!* OtraForma
*!* oMsg = CREATEOBJECT('MsgBoxTransparent')
*!* oMsg.BoxTitle = "Nuevo Título"
*!* Definir la opacidad en tiempo de ejecución
*!* por default es de 65% de opacidad
*!* **************************************
*!* lRet = oMsg.Show('Denny Infante', 60)
?'Resultado = ' +
ALLTRIM(STR(lRet))oMsg =
nullDEFINE CLASS
MsgBoxTransparent as ContainerADD OBJECT
tmrTimer AS TimerBoxTitle = "MDI Ingeniería"
PorcentajeOpacidad = 65
PROCEDURE Init
LPARAMETERS
lcTituloIF TYPE('lcTitulo') = "C" THEN
This
.FBoxTitle = ALLTRIM(lcTitulo)ENDIF
This
.tmrTimer.Interval = 1ENDPROC
FUNCTION Show
PARAMETERS
cMensaje, iPorcentajeOpacidadThis.PorcentajeOpacidad = 65
IF TYPE("iPorcentajeOpacidad") = "N" IF BETWEEN(iPorcentajeOpacidad, 0, 100)
This.PorcentajeOpacidad = iPorcentajeOpacidad
ENDIF
ENDIF
This.tmrTimer.Enabled = .T.
RETURN MESSAGEBOX(cMensaje,3 + 32, This.BoxTitle) &&"MDI Msg")
*!* También puede utilizarse la Función del API
*!* lRet = MessageBoxA(_VFP.hWnd, "Maricela Figueroa", "MDI Msg", 0)
*!* RETURN lRet
ENDPROC
PROCEDURE tmrTimer.Timer
LOCAL lcHandle
lcHandle = FindWindow(null, This.parent.BoxTitle) &&"MDI Msg")
IF (lcHandle > 0)
This.Enabled = .F.
LOCAL lcWndStyle
*!* GetWindowLong
*!* Esto es necesario para que la ventana pueda verse
*!* translucida y evitar el "flicker"
lcWndStyle = GetWindowLong(lcHandle, GWL_EXSTYLE)
IF NOT (BITAND(lcWndStyle, WS_EX_LAYERED ) = WS_EX_LAYERED)
lcWndStyle = lcWndStyle + WS_EX_LAYERED
SetWindowLong(lcHandle, GWL_EXSTYLE, lcWndStyle)
ENDIF
LOCAL lcByte
lcByte = INT(This.Parent.PorcentajeOpacidad * 255 / 100)
SetLayeredWindowAttributes(lcHandle, 0, lcByte, 2)
ELSE
WAIT WINDOW 'No encontrada...' nowait
ENDIF
ENDPROC
ENDDEFINE