In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Llamada a XA_DrawParentBackground() desde un componente

Foro público de Xailer en español
Responder
alberto.4154
Mensajes: 11
Registrado: Mar Abr 12, 2011 5:21 pm

Llamada a XA_DrawParentBackground() desde un componente

Mensaje por alberto.4154 »

Ignacio, José,
Estoy desarrollando un componente que hace una llamada a
XA_DrawParentBackground() desde PRG, el correspondiente "Wrapper"
figura en la propia DLL. Desde programación funciona correctamente, sin
embargo desde el IDE, al añadir el componente, que por defecto tiene
lTransparent a .T., falla y muestra el siguiente error:
XA_DRAWPARENTBACKGROUND(0)
Error BASE/1001 Undefined function: XA_DRAWPARENTBACKGROUND
Entiendo que es debido a que el "wrapper" de la función no está
declarada en el IDE.
¿Hay alguna forma de llamar o declarar la función desde PRG para que
funcione correctamente o tendrí­ais que añadirla al IDE?
Un saludo,
Alberto

--
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Llamada a XA_DrawParentBackground() desde un componente

Mensaje por jlalin »

Alberto,
> Estoy desarrollando un componente que hace una llamada a
> XA_DrawParentBackground() desde PRG, el correspondiente "Wrapper"
No necesitas hacer ningún wrapper para usar la función, basta conque
incluyas <xailer.h> y la utilices como cualquier otra.
Saludos,
José Lalí­n
alberto.4154
Mensajes: 11
Registrado: Mar Abr 12, 2011 5:21 pm

Llamada a XA_DrawParentBackground() desde un componente

Mensaje por alberto.4154 »

Hola José,

> > Estoy desarrollando un componente que hace una llamada a
> > XA_DrawParentBackground() desde PRG, el correspondiente "Wrapper"
>
> No necesitas hacer ningún wrapper para usar la función, basta conque
> incluyas <xailer.h> y la utilices como cualquier otra.
>
> Saludos,
> José Lalí­n

Me sigue diciendo que función no definida.
¿Estás seguro que tiene que funcionar?. Te recuerdo que la llamada se
realiza desde código PRG, no C, desde una DLL que llama el IDE de
Xailer.
Saludos,
Alberto A.T.
--
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Llamada a XA_DrawParentBackground() desde un componente

Mensaje por jlalin »

Alberto,
> Me sigue diciendo que función no definida.
¿La DLL se crea correctamente?
> ¿Estás seguro que tiene que funcionar?. Te recuerdo que la llamada se
> realiza desde código PRG, no C, desde una DLL que llama el IDE de
> Xailer.
Entendido. ¿Cómo estás haciendo el wrapper?
Saludos,
José Lalí­n
alberto.4154
Mensajes: 11
Registrado: Mar Abr 12, 2011 5:21 pm

Llamada a XA_DrawParentBackground() desde un componente

Mensaje por alberto.4154 »

Jose,

> > Me sigue diciendo que función no definida.
>
> ¿La DLL se crea correctamente?
>
> > ¿Estás seguro que tiene que funcionar?. Te recuerdo que la llamada
> > se realiza desde código PRG, no C, desde una DLL que llama el IDE de
> > Xailer.
>
> Entendido. ¿Cómo estás haciendo el wrapper?
El código es el que te indico a continuación, lo puso José F. Gimenez,
y desde la .LIB funciona correctamente.

#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
//---------------------------------------------------------- ------------
----
XA_FUNC( XA_DRAWPARENTBACKGROUND )
{
XA_DrawParentBackground( (HWND) hb_parnl( 1 ), (HDC) hb_parnl( 2 ),
NULL );
hb_ret();
}
#pragma ENDDUMP
//---------------------------------------------------------- ------------
----
Por otro lado una llamada a Type('XA_DrawParentBackground()') devuelve
'U', en la DLL y 'UI' en la LIB.
Un saludo y gracias por tu tiempo
Alberto
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Llamada a XA_DrawParentBackground() desde un componente

Mensaje por jlalin »

Alberto,
> XA_FUNC( XA_DRAWPARENTBACKGROUND )
prueba así­:
HB_FUNC( XA_DRAWPARENTBACKGROUND )
Saludos,
José Lalí­n
alberto.4154
Mensajes: 11
Registrado: Mar Abr 12, 2011 5:21 pm

Llamada a XA_DrawParentBackground() desde un componente

Mensaje por alberto.4154 »

José,
>
> > XA_FUNC( XA_DRAWPARENTBACKGROUND )
>
> prueba así­:
>
> HB_FUNC( XA_DRAWPARENTBACKGROUND )
>
Sigue dando el mismo error:
XA_DRAWPARENTBACKGROUND(0)
Error BASE/1001 Undefined function: XA_DRAWPARENTBACKGROUND
Sin embargo, si uso el siguiente código para la transparencia
if Type('XA_DrawParentBackground()')=='U'
:FillRect( aRect, ::GetClrBackground( ::oParent ) )
else
XA_DrawParentBackground( ::Handle, hdc )
endif
con una imagen de fondo desde el IDE me muestra el color de fondo del
padre, mientras que en el ejecutable, que enlaza la LIB se ve
completamente la imagen. ::GetClrBackground() es un método propio para
obtener el color del padre o su antecesor si es transparente.
Un saludo,
Alberto
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Llamada a XA_DrawParentBackground() desde un componente

Mensaje por jlalin »

Alberto,
HB_FUNC_STATIC( XA_DRAWPARENTBACKGROUND )
Saludos,
José Lalí­n
alberto.4154
Mensajes: 11
Registrado: Mar Abr 12, 2011 5:21 pm

Llamada a XA_DrawParentBackground() desde un componente

Mensaje por alberto.4154 »

José,
> Alberto,
>
> HB_FUNC_STATIC( XA_DRAWPARENTBACKGROUND )
Al compilar el Wrapper me muestra el siguiente error:
Compilando Wrappers.prg...
Error E2451 Wrappers.c 19: Undefined symbol
'HB_FUN_XA_DRAWPARENTBACKGROUND'
Error E2141 Wrappers.c 19: Declaration syntax error
Error E2190 Wrappers.c 19: Unexpected }
Error E2190 Wrappers.c 19: Unexpected }
Error E2040 Wrappers.c 19: Declaration terminated incorrectly
Error E2190 Wrappers.c 19: Unexpected }
Error E2190 Wrappers.c 19: Unexpected }
Error E2190 Wrappers.c 20: Unexpected }
Error E2109 Wrappers.c 20: Not an allowed type in function
hb_vm_SymbolInit_WRAPPERS
Error E2238 Wrappers.prg 19: Multiple declaration for
'HB_FUN_XA_DRAWPARENTBACKGROUND'
La lí­nea 19 es la que contiene: HB_FUNC_STATIC( XA_DRAWPARENTBACKGROUND
)
No obstante, he conseguido que funcione creando la función como método
de la clase XLabelVert:
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
//---------------------------------------------------------- ------------
HB_FUNC_STATIC( XLABELVERT_DRAWPARENTBACKGROUND )
{
XA_DrawParentBackground( (HWND) hb_parnl( 1 ), (HDC) hb_parnl( 2 ),
NULL );
hb_ret();
}
#pragma ENDDUMP
//---------------------------------------------------------- ------------
Con esto sí­ que funciona en tiempo de diseño.
Muchas gracias por tu ayuda, a ver si en esta semana puedo subir una
actualización de los componentes.
Un saludo,
Alberto A.T.
--
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Llamada a XA_DrawParentBackground() desde un componente

Mensaje por jlalin »

Alberto,
si con esto:
>> HB_FUNC_STATIC( XA_DRAWPARENTBACKGROUND )
muestra este error:
> Error E2451 Wrappers.c 19: Undefined symbol
> 'HB_FUN_XA_DRAWPARENTBACKGROUND'
algo raro hay en la instalación de Xailer, xHarbour o del compilador C. Si
ese tipo de declaraciones fallaran el propio xHarbour y Xailer serí­an
"in"compilables.
¿Puedes enviarme el proyecto por privado para revisarlo?
Saludos,
José Lalí­n
Responder