Página 1 de 1
Controles Transparentes
Publicado: Mar Abr 19, 2011 7:40 pm
por xhermita
Sigo con el control TLabel con Efectos (Bautizado TLabelFX por binguen),
pero me apremia el tiempo y necesito aplicarlo a mi programa aunque no
tenga todas las funcionalidades, incluso aunque tenga que crearlos por
código y no visualmente, no me importa.
El problema surge al incluirlos en el programa, se ven bien pero el
control no es transparente por lo que el efecto que que quería conseguir
no me vale.
Ayuda: ¿Como hago para que el control sea transparente?
Controles Transparentes
Publicado: Mar Abr 19, 2011 9:12 pm
por xhermita
Vale; ya es transparente, pero demasiado transparente, no se ve el
contenido del control.
He estado hurgando en los controles que trae xailer "TLabel" y "TBevel"
que son transparentes, he visto que usan una funcion externa llamada
XWinControl_WMEraseBkgnd() (no tengo ni idea de donde sale, ni como
funciona) y he estado experimentando, pero no consigo que sea
transparente y ademas aparezca lo que yo pinto con canvas sobre el control.
El 19/04/2011 18:40, Pedro Amaro escribió:
> Sigo con el control TLabel con Efectos (Bautizado TLabelFX por binguen),
> pero me apremia el tiempo y necesito aplicarlo a mi programa aunque no
> tenga todas las funcionalidades, incluso aunque tenga que crearlos por
> código y no visualmente, no me importa.
>
> El problema surge al incluirlos en el programa, se ven bien pero el
> control no es transparente por lo que el efecto que que quería conseguir
> no me vale.
>
> Ayuda: ¿Como hago para que el control sea transparente?
--
Controles Transparentes
Publicado: Mié Abr 20, 2011 11:55 am
por jfgimenez
Pedro,
si estás haciendo el pintado desde C, llama a esta función al empezar a
pintar:
XA_DrawParentBackground( hWnd, hdc, NULL );
Y si el pintado lo estás haciendo desde PRG, entonces tendrás que hacer el
"wrapper", así:
XA_FUNC( XA_DRAWPARENTBACKGROUND )
{
XA_DrawParentBackground( (HWND) hb_parnl( 1 ), (HDC) hb_parnl( 2 ),
NULL );
hb_ret();
}
Y si no lo consigues, puedes enviarme la función de pintado para revisarla.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
Controles Transparentes
Publicado: Mié Abr 20, 2011 7:57 pm
por xhermita
Vale, lo voy pillando.
Pero en la llamada a XA_DRAWPARENTBACKGROUND que pongo en mi metodo de
pintado, ¿que le pongo en los dos parámetros.?
El 20/04/2011 10:55, Jose F. Gimenez escribió:
> Pedro,
>
> si estás haciendo el pintado desde C, llama a esta función al empezar a
> pintar:
>
> XA_DrawParentBackground( hWnd, hdc, NULL );
>
> Y si el pintado lo estás haciendo desde PRG, entonces tendrás que hacer
> el "wrapper", así:
>
> XA_FUNC( XA_DRAWPARENTBACKGROUND )
> {
> XA_DrawParentBackground( (HWND) hb_parnl( 1 ), (HDC) hb_parnl( 2 ), NULL );
> hb_ret();
> }
>
>
> Y si no lo consigues, puedes enviarme la función de pintado para revisarla.
>
Controles Transparentes
Publicado: Jue Abr 21, 2011 1:54 pm
por jfgimenez
Pedro,
> Pero en la llamada a XA_DRAWPARENTBACKGROUND que pongo en mi metodo de
> pintado, ¿que le pongo en los dos parámetros.?
hWnd es el handle del control, o sea, ::Handle, y hdc es el "handle del
dispositivo de contexto" para pintar, y es el que estes usando en el resto
de comandos de pintado. En el caso de que estés pintando desde PRG usando el
"canvas", entonces el hdc es oCanvas:hdc
Resumiendo, si estás pintando desde PRG:
- hWnd: lo obtienes con ::Handle
- hdc: lo obtienes con oCanvas:hdc
Y si estás pintando desde C:
- hWnd: lo obtienes con:
PHB ITEM Self = hb_stackSelfItem();
HWND hWnd = GetHandleOf( Self );
- hdc: lo obtienes en la llamada a BeginPaint():
LPPAINTSTRUCT ps;
HDC hdc = BeginPaint( hWnd, ps );
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
Controles Transparentes
Publicado: Sab Abr 23, 2011 10:58 am
por xhermita
¡Chapo Maestro!, ha quedado perfecto.
Buen fin de semana
El 21/04/2011 12:54, Jose F. Gimenez escribió:
> Pedro,
>
>> Pero en la llamada a XA_DRAWPARENTBACKGROUND que pongo en mi metodo de
>> pintado, ¿que le pongo en los dos parámetros.?
>
> hWnd es el handle del control, o sea, ::Handle, y hdc es el "handle del
> dispositivo de contexto" para pintar, y es el que estes usando en el
> resto de comandos de pintado. En el caso de que estés pintando desde PRG
> usando el "canvas", entonces el hdc es oCanvas:hdc
>
> Resumiendo, si estás pintando desde PRG:
>
> - hWnd: lo obtienes con ::Handle
> - hdc: lo obtienes con oCanvas:hdc
>
> Y si estás pintando desde C:
>
> - hWnd: lo obtienes con:
> PHB ITEM Self = hb_stackSelfItem();
> HWND hWnd = GetHandleOf( Self );
>
> - hdc: lo obtienes en la llamada a BeginPaint():
> LPPAINTSTRUCT ps;
> HDC hdc = BeginPaint( hWnd, ps );
>
>
Controles Transparentes
Publicado: Sab Abr 23, 2011 11:09 am
por xhermita
Gracias a la ayuda del Maestro Jose Gimenez he conseguido que el control
TLabelFX sea transparente, y pueda aplicarlo a mi programa.
Les adjunto dos imágenes iguales del formulario principal, una con
TLabel y otra con TlabelFX.
Un saludo
Pedro Amaro
--