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.

No me pinta Rectangle en TCanvas

Foro de Xailer profesional en español
buzonjmartial
Posts: 55
Joined: Fri Apr 10, 2009 11:02 pm

No me pinta Rectangle en TCanvas

Postby buzonjmartial » Sun Apr 14, 2019 2:45 pm

Buenos días,

Tenía una función que pintaba 2 rectángulos y un relleno en Xailer 1.9, ahora me ha dejado de funcionar con xailer 6.1 el pintar el rectángulo.

Code: Select all

WITH OBJECT oCanvas := TCanvas():Create(Screen)
        :hDC := hDC
        :Rectangle( {nLeft,nTop, nWidth, nHeight})                               // AHORA NO PINTA NADA
        :FillRect( {nLeft+1,nTop+1, nWidth-1, nHeight-1}, oBrush)
        :Rectangle( {nLeft2,nTop2, nWidth2, nHeight2})                        // AHORA NO PINTA NADA                       
    END


Haciendo esta modificación y llamando a la función en C rectangle, si me los pinta:

Code: Select all

WITH OBJECT oCanvas := TCanvas():Create(Screen)
        :hDC := hDC
        Rectangle(:hDC, nLeft,nTop, nWidth, nHeight)
  //   :Rectangle( {nLeft,nTop, nWidth, nHeight})
        :FillRect( {nLeft+1,nTop+1, nWidth-1, nHeight-1}, oBrush)
  //   :Rectangle( {nLeft2,nTop2, nWidth2, nHeight2})
        Rectangle(:hDC, nLeft2,nTop2, nWidth2, nHeight2)
    END



¿ Que estoy haciendo mal?
Un Saludo,
Joaquín Martínez
User avatar
ignacio
Site Admin
Posts: 8546
Joined: Mon Apr 06, 2015 8:00 pm
Location: Madrid, Spain
Contact:

Re: No me pinta Rectangle en TCanvas

Postby ignacio » Mon Apr 15, 2019 11:36 am

Buenos días,

El pintado de cualquier control se debe de realizar en su evento ONPAINTED y utilizando el HDC que proporciona el evento. Asegurese de que la brocha que está pasando como parámetro esta inicializada.

Saludos

Code: Select all

METHOD Bevel1Painted( oSender, hDC, cPaintStruct ) CLASS TForm1

   LOCAL oCanvas AS CLASS TCanvas
   LOCAL oBrush AS CLASS TBrush
   LOCAL aRect

   oCanvas := TCanvas():NewFromDC( hDC )
   oBrush  := TBrush():New()
   oBrush:nColor := clRed
   oBrush:Create()

   aRect   := GetClientRect(oSender:Handle)
   InflateRect( aRect, -5, -5)
   oCanvas:Rectangle( aRect, oBrush )
   oBrush:End()
   oCanvas:End()

RETURN Nil
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
buzonjmartial
Posts: 55
Joined: Fri Apr 10, 2009 11:02 pm

Re: No me pinta Rectangle en TCanvas

Postby buzonjmartial » Mon Apr 15, 2019 12:39 pm

Buenos días Ignacio,

He puesto de la forma que funciona y con TCanvas no funciona.

Para que funcione obviamente el hDC tiene que ser válido. Y está en el PAINT del control.

Esta es la función en C que funciona perfectamente en el ejemplo que he puesto.

Code: Select all

HB_FUNC( RECTANGLE )
{
  hb_retl( Rectangle( (HDC) hb_parnl(1), hb_parni(2),hb_parni(3),hb_parni(4),hb_parni(5)) );
}
Un Saludo,
Joaquín Martínez
User avatar
ignacio
Site Admin
Posts: 8546
Joined: Mon Apr 06, 2015 8:00 pm
Location: Madrid, Spain
Contact:

Re: No me pinta Rectangle en TCanvas

Postby ignacio » Mon Apr 15, 2019 1:11 pm

2019-04-15 13_10_37.png
2019-04-15 13_10_37.png (7.67 KiB) Viewed 808 times


Si sabes hacerlo mejor que yo. Lo siento, pero no entiendo porque preguntas. :-(
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
buzonjmartial
Posts: 55
Joined: Fri Apr 10, 2009 11:02 pm

Re: No me pinta Rectangle en TCanvas

Postby buzonjmartial » Tue Apr 16, 2019 10:16 am

Buenos días Ignacio,

Ya he encontrado la diferencia de comportamiento con Xailer 1.9

Parece ser que creé la función rectangle en C como te puse en el mensaje anterior y la llamada sería
Rectangle( :hDC, nLeft , nTop, nRight, nBottom), (Creo que no existía dicha función en Xailer 1.9) y
en la versión de Xailer 6.1 habéis hecho el wrapper a la función rectangle( hDC, aRect), la cual causaba conflicto con la que hice yo.

Era sólo eso, y lo puse aquí en el foro para averiguar por qué ocurría.
Le he cambiado el nombre a mi wrapper y ya toma la función de Xailer rectangle, con lo cual, la TCanvas ya
pinta los rectángulos con su método ::rectangle().

Gracias,
Un Saludo,
Joaquín Martínez

Return to “Spanish”