Ejemplo de Formulario Transparente!!!

01/03/2020

 

Diógenes Vilarroel (Hotmail) - 2007

Este ejemplo lo encontre en http://www.codefox.net/modules.php?name=News&file=article&sid=126.

Le agregue algunas instrucciones para que funcione porque no corre tal como lo indica en la dirección anterior. Mas abajo el código ajustado. Ver "&& Agregado".

Funciona de maravilla en VFP 6 en adelante. Pero tiene una limitante y es que solo funciona en formularios de nivel superior. Es decir, no funciona con la propiedad ShowWindow igual a "0" o en "1". Ver "&& Ojo".

Sobre este código, alguien tiene idea de como hacer para que funcione solo en la ventana de una aplicacion con la propiedad ShowWindow=0 ?

El truco esta en la funcion FindWindow que devuelve un puntero "hWnd" de la ventana que se solicita "this.hWnd=FindWindow(0, this.caption)". El resto lo hace las funciones GetWindowLong, SetWindowLong y SetLayeredWindowAttributes que necesitan del puntero "hWnd".

Otra pregunta: Como puedo agregar un boton en la barra superior del formulario al lado de los botones de minimizar, maximizar y cerrar ?

Gracias por la ayuda.

  **********
oForm = CREATEOBJECT("Tform")
oForm.Visible = .T.
READ EVENTS

DEFINE CLASS tform As Form
#DEFINE LWA_COLORKEY 1
#DEFINE LWA_ALPHA 2
#DEFINE GWL_EXSTYLE -20
#DEFINE WS_EX_LAYERED 0x80000
Autocenter=.T.
Caption="Transparent Form"
ShowWindow=2 && Ojo
hwnd=.f. && Agregado

ADD OBJECT cmdSet As CommandButton WITH;
Left=10, Top=10, Height=27, Width=80, Caption="Set"

ADD OBJECT cmdClear As CommandButton WITH;
Left=100, Top=10, Height=27, Width=80, Caption="Clear"

PROCEDURE Init

DECLARE INTEGER FindWindow IN WIN32API INTEGER, STRING && Agregado

DECLARE INTEGER GetWindowLong IN user32;
INTEGER hWnd, INTEGER nIndex

DECLARE INTEGER SetWindowLong IN user32;
INTEGER hWnd, INTEGER nIndex, INTEGER dwNewLong

DECLARE INTEGER SetLayeredWindowAttributes IN user32;
INTEGER hwnd, INTEGER crKey,;
SHORT bAlpha, INTEGER dwFlags

this.hWnd=FindWindow(0, this.caption) && Agregado

PROCEDURE Destroy
CLEAR EVENTS

PROCEDURE SetMode
LOCAL nExStyle
nExStyle = GetWindowLong(THIS.HWnd, GWL_EXSTYLE)
nExStyle = BITOR(nExStyle, WS_EX_LAYERED)
= SetWindowLong(THIS.HWnd, GWL_EXSTYLE, nExStyle)
= SetLayeredWindowAttributes(THIS.HWnd, 0,;
128, LWA_ALPHA)

PROCEDURE ClearMode
LOCAL nExStyle
nExStyle = GetWindowLong(THIS.HWnd, GWL_EXSTYLE)
nExStyle = BITXOR(nExStyle, WS_EX_LAYERED)
= SetWindowLong(THIS.HWnd, GWL_EXSTYLE, nExStyle)

PROCEDURE cmdSet.Click
ThisForm.SetMode

PROCEDURE cmdClear.Click
ThisForm.ClearMode
ENDDEFINE

 

Jorge

Tengo una pregunta, soy nuevo en fox, si creo un formulario con el asistente
donde meto o como programo lo siguiente:

  DEFINE CLASS tform As Form
   #DEFINE LWA_COLORKEY 1
   #DEFINE LWA_ALPHA 2
   #DEFINE GWL_EXSTYLE -20
   #DEFINE WS_EX_LAYERED 0x80000


Ya que no meti todo el codigo en un .prg si no lo creo con el asistente .
Nota: el resto del codigo ya lo tengo en el formulario y en los botones
pero me falta por que me manda el siguiente error:

variable 'GWL_EXTYLE' is not found.
espero y me puedan ayudar.

 

Diógenes Vilarroel (Hotmail)

Saludos.

Debes crear un archivo ".h", por ejemplo: include.h y en él debes colocar
todas las directrices #DEFINE

Luego en el diseño del formulario, vas al menu "Formulario" y seleccionas la
opcion "Incluir archivo...". Seleccionas el archivo ".h" y listo. Ejecuta tu
formulario.

Post by Jorge Tengo una pregunta, soy nuevo en fox, si creo un formulario con el asistente

 DEFINE CLASS tform As Form
    #DEFINE LWA_COLORKEY 1
    #DEFINE LWA_ALPHA 2
    #DEFINE GWL_EXSTYLE -20
    #DEFINE WS_EX_LAYERED 0x80000   

Ya que no meti todo el codigo en un .prg si no lo creo con el asistente . Nota: el resto del codigo ya lo tengo en el formulario y en los botones variable 'GWL_EXTYLE' is not found. espero y me puedan ayudar.

 

Jorge Vega

El segmento

 DEFINE CLASS tform As Form
    #DEFINE LWA_COLORKEY 1
    #DEFINE LWA_ALPHA 2
    #DEFINE GWL_EXSTYLE -20
    #DEFINE WS_EX_LAYERED 0x80000   

lo puedes instanciar en el metodo init de tu formulario también

 

Vea también

 


 

Referencias

Autor: Diógenes Vilarroel
Narkive

 


 

 

 



error: Contenido protegido