Una forma de hacer transparentes nuestros formularios de nivel superior (ShowWindow = 2).

PUBLIC goform
m.goform = NEWOBJECT("MiFormTopLevel")
m.goform.SHOW(1)
RETURN
DEFINE CLASS MiFormTopLevel AS FORM
SHOWWINDOW = 2 && Formulario de nivel superior
AUTOCENTER = .T.
CAPTION = "Mi Formulario Transparente"
NAME = "frmMiForm"
ADD OBJECT lblOpac AS LABEL WITH ;
FONTBOLD = .T., ;
FONTSIZE = 20, ;
LEFT = 50, ;
TOP = 45, ;
CAPTION = "Opacidad:", ;
AUTOSIZE = .T., ;
NAME = "lblOpac"
ADD OBJECT sprOpac AS SPINNER WITH ;
FONTBOLD = .T., ;
FONTSIZE = 20, ;
HEIGHT = 40, ;
LEFT = 200, ;
TOP = 40, ;
WIDTH = 80, ;
VALUE = 75, ;
INCREMENT = 5, ;
KEYBOARDHIGHVALUE = 100, ;
KEYBOARDLOWVALUE = 10, ;
SPINNERHIGHVALUE = 100, ;
SPINNERLOWVALUE = 10, ;
NAME = "sprOpac"
PROCEDURE LOAD
IF VAL(OS(3)) >= 5 && Windows 2000 o superior
LOCAL lnOpacidad
m.lnOpacidad = 75 && Porcentaje de opacidad
m.lnOpacidad = 255 * MIN(MAX(m.lnOpacidad,0),100) / 100
DECLARE SetWindowLong ;
IN WIN32API ;
AS __SetWindowLong ;
INTEGER, ;
INTEGER, ;
INTEGER
DECLARE SetLayeredWindowAttributes ;
IN WIN32API ;
AS __SetLayeredWindowAttributes ;
INTEGER, ;
STRING, ;
INTEGER, ;
INTEGER
__SetWindowLong(THISFORM.HWND, -20, 0x00080000)
__SetLayeredWindowAttributes(THISFORM.HWND, 0, m.lnOpacidad, 2)
ENDIF
ENDPROC
PROCEDURE sprOpac.INTERACTIVECHANGE
IF VAL(OS(3)) >= 5 && Windows 2000 o superior
LOCAL lnOpacidad
m.lnOpacidad = THIS.VALUE
m.lnOpacidad = 255 * MIN(MAX(m.lnOpacidad,0),100) / 100
__SetLayeredWindowAttributes(THISFORM.HWND, 0, m.lnOpacidad, 2)
ENDIF
ENDPROC
ENDDEFINE
Luis María Guayán
Muy bueno, gracias.
ResponderBorrarExcelente, gracias
ResponderBorrar