Discussion:
Ejemplo de Formulario Transparente!!!
(demasiado antiguo para responder)
Diógenes Vilarroel (Hotmail)
2006-11-15 15:26:27 UTC
Permalink
Saludos.

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
2006-11-27 21:55:02 UTC
Permalink
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)
2006-11-29 23:59:05 UTC
Permalink
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
2007-01-16 08:38:03 UTC
Permalink
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 tambien

--
Saludos.
Jorge Vega
CODELOGIC
Chihuahua, Mexico.
MSN: ***@hotmail.com
Contacto: ***@gmail.com
___________________________________________
Visual Foxpro 9.0 SP1
___________________________________________

"Jorge" <***@discussions.microsoft.com> escribi� en el mensaje news:AD758D40-F065-4438-A64A-***@microsoft.com...
| 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.

Loading...