Página 1 de 1

Llamada a XA_DrawParentBackground() desde un componente

Publicado: Lun Jun 06, 2011 5:34 pm
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

--

Llamada a XA_DrawParentBackground() desde un componente

Publicado: Lun Jun 06, 2011 5:59 pm
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

Llamada a XA_DrawParentBackground() desde un componente

Publicado: Lun Jun 06, 2011 6:37 pm
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.
--

Llamada a XA_DrawParentBackground() desde un componente

Publicado: Lun Jun 06, 2011 6:54 pm
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

Llamada a XA_DrawParentBackground() desde un componente

Publicado: Lun Jun 06, 2011 7:14 pm
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

Llamada a XA_DrawParentBackground() desde un componente

Publicado: Lun Jun 06, 2011 7:18 pm
por jlalin
Alberto,
> XA_FUNC( XA_DRAWPARENTBACKGROUND )
prueba así­:
HB_FUNC( XA_DRAWPARENTBACKGROUND )
Saludos,
José Lalí­n

Llamada a XA_DrawParentBackground() desde un componente

Publicado: Lun Jun 06, 2011 7:36 pm
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

Llamada a XA_DrawParentBackground() desde un componente

Publicado: Lun Jun 06, 2011 9:13 pm
por jlalin
Alberto,
HB_FUNC_STATIC( XA_DRAWPARENTBACKGROUND )
Saludos,
José Lalí­n

Llamada a XA_DrawParentBackground() desde un componente

Publicado: Mar Jun 07, 2011 5:25 pm
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.
--

Llamada a XA_DrawParentBackground() desde un componente

Publicado: Mar Jun 07, 2011 9:03 pm
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