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
Responder
buzonjmartial
Mensajes: 100
Registrado: Vie Abr 10, 2009 11:02 pm

No me pinta Rectangle en TCanvas

Mensaje por buzonjmartial »

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.

Código: Seleccionar todo

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:

Código: Seleccionar todo

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
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9253
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: No me pinta Rectangle en TCanvas

Mensaje por ignacio »

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

Código: Seleccionar todo

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]
https://www.xailer.com
buzonjmartial
Mensajes: 100
Registrado: Vie Abr 10, 2009 11:02 pm

Re: No me pinta Rectangle en TCanvas

Mensaje por buzonjmartial »

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.

Código: Seleccionar todo

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
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9253
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: No me pinta Rectangle en TCanvas

Mensaje por ignacio »

2019-04-15 13_10_37.png
2019-04-15 13_10_37.png (7.67 KiB) Visto 3255 veces
Si sabes hacerlo mejor que yo. Lo siento, pero no entiendo porque preguntas. :-(
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
buzonjmartial
Mensajes: 100
Registrado: Vie Abr 10, 2009 11:02 pm

Re: No me pinta Rectangle en TCanvas

Mensaje por buzonjmartial »

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
Responder