FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Coordenadas de caja con bordes redondos
Posts: 464
Joined: Tue Mar 21, 2006 07:30 PM
Coordenadas de caja con bordes redondos
Posted: Wed Dec 10, 2008 07:38 PM
Hola a todos

Un pequeño inconveniente que me acaba de surgir, por si le ha pasado a alguno.

En la impresión de facturas, utilizando la clase Tprinter, pongo dos cajas redondeadas donde encierro, en una de ellas, los datos de la factura y en la otra los datos del cliente. Esto funcionaba bien en FW 2.7.
Ahora he pasado todo el programa a FWH 8.04 y mi sorpresa es que las cajas salen al revés.

CajaRound( 5, 1, 7.7, 10.2, 200, 200, oPrn, oPen2)
CajaRound( 5, 10.3, 7.7, 20, 200, 200, oPrn, oPen2)

Function CAJAROUND(nArriba,nIzq,nAbajo,nDerecha,a,b,oPrn,oPen)

 LOCAL hOldPen, xCor := {} , yCor := {}

 xCor := oPrn:Cmtr2Pix(nArriba,nIzq)
 yCor := oPrn:Cmtr2Pix(nAbajo,nDerecha)

 // Guardamos el Pen que teniamos
 hOldPen := SelectObject( oPrn:hDcOut, oPen:hPen )

 //Dibujamos el rectangulo redondeado
 roundrect(oPrn:hdcOut,xCor[1],xCor[2],yCor[1],yCor[2],a,b)

 // y lo seleccionamos el que habiamos guardado
 selectObject( oPrn:hDcOut, hOldPen )

 RETURN NIL

Esto es de The Full, un ejemplo publicado para hacer cajas con el borde redondeado.
Si cambio los dos primeros parámetros, la caja sale más o menos bien, el fallo es que no pinta la línea inferior, y la une a la caja general del cuerpo de la factura, que esa si la pinta bien.
Esto en la primera caja.
La segunda caja con los parámetros originales, ni la pinta, pero si cambio los dos primeros parámetros, me la pinta junto a la primera.
Mi duda es : los parámetros en la funcion roundrect son diferentes?
en vez de Arriba, Izquierda, Abajo, Derecha,......son Izquierda, Arriba, Derecha, Abajo?, o cómo son?

Un saludo a todos
Pedro
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Coordenadas de caja con bordes redondos
Posted: Wed Dec 10, 2008 09:41 PM

Este es el método ROUNDBOX de la clase Tprinter:

RoundBox Draws a box with rounded corners.

Syntax: <oPrn>:RoundBox( <nTop>, <nLeft>, <nBottom>, <nRight>, <nWidth>, <nHeight>, <oPen>, <nBGColor> )
Parameters: <nTop> The coordinates of the box to draw. By default they <nBottom> are expressed in pixels, unless a different <nLeft> SetMapMode() mode is selected. <nRight> <nWidth> The width of the ellipse used to draw the rounded corners. <nHeight> The height of the ellipse used to draw the rounded corners. <oPen> It is an optional pen object to use for painting the box. <nBGColor> It is an optional color to be used for the box background. To create it use: DEFINE PEN oPen STYLE ... COLOR ... WIDTH ...
Returns: Nil.

Un saludo



Manuel
Posts: 464
Joined: Tue Mar 21, 2006 07:30 PM
Coordenadas de caja con bordes redondos
Posted: Wed Dec 10, 2008 11:21 PM
Gracias Manuel, pero poniendo oPrn:RoundBox y las mismas coordenadas, ni me pinta la caja...
Busqué el método en la clase Tprinter y puse lo mismo sin el color
oPrn:RoundBox(5, 1, 7.7, 10.2, 200, 200, oPen2)
oPrn:RoundBox(5, 10.3, 7.7, 20, 200, 200, oPen2)
y lo mismo con los dos primeros parámetros al reves
oPrn:RoundBox(1, 5, 7.7, 10.2, 200, 200, oPen2)
oPrn:RoundBox(10.3, 5 , 7.7, 20, 200, 200, oPen2)
ninguna de las dos cajas se pintaban.
No sé el motivo, pues antes se pintaban, como se pinta la caja central correctamente.
Caja(8.5,1,24,20, oPrn,0,,oPen1) // Caja General

Function Caja(nArriba,nIzq,nAbajo,nDerecha,oPrn,nTipo,oBrush,oPen)

Local xCor := {} , yCor := {}

// Pasamos coordenadas de cms a pixel

xCor := oPrn:Cmtr2Pix(nArriba,nIzq)
yCor := oPrn:Cmtr2Pix(nAbajo,nDerecha)

DO CASE
   CASE nTipo == 0	 // Caja Vacia
	oPrn:Box(xCor[1],xCor[2],yCor[1],yCor[2],oPen)
   CASE nTipo == 1	 // Caja rellena
	oPrn:FillRect({xCor[1],xCor[2],yCor[1],yCor[2]},oBrush)
ENDCASE

return NIL


como veras la única diferencia es el uso de oPrn:Box o bien oPrn:RoundBox, éste método llama a la función RoundRect( ::hDCOut, nRow, nCol, nBottom, nRight, nWidth, nHeight ) de la misma forma que lo hace el ejemplo de The full
//Dibujamos el rectangulo redondeado
roundrect(oPrn:hdcOut,xCor[1],xCor[2],yCor[1],yCor[2],a,b)

Lo que no entiendo es por qué las cajas salen al reves, es decir si lo más largo de la caja es desde Izquierda a Derecha, me lo pinta de Arriba a Abajo. Si pongo las coordenadas al reves, me lo pinta bien, pero la linea inferior no la pinta y pega la caja a la linea de la caja general.
Espero que Antonio si lee esto pueda dar un respuesta.

Un saludo y gracias Manuel
Pedro
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Coordenadas de caja con bordes redondos
Posted: Thu Dec 11, 2008 04:41 AM

¿y no será que estás aplicando cms y pixels?. Yo lo hago utilizando una función propia (RCAJA) y aplicando tu ejemplo me ha salido perfectamente. Prueba lo siguiente:

RCaja(oPrn, 5, 1, 7.7, 10.2, 200, 200, oPen2 )
RCaja(oPrn, 5, 10.3, 7.7, 20, 200, 200, oPen2)

Func RCaja(oPrn, nArriba, nIzq, nAbajo, nDerecha, nAncho, nAlto, oPen, nColor )
Local xCor := {} , yCor := {}

// Pasamos coordenadas de cms a pixel
xCor := oPrn:Cmtr2Pix(nArriba,nIzq)
yCor := oPrn:Cmtr2Pix(nAbajo,nDerecha)

oPrn:RoundBox(xCor[2],xCor[1],yCor[2],yCor[1],nAncho,nAlto,oPen, nColor )

return NIL

Un saludo



Manuel
Posts: 428
Joined: Thu Oct 19, 2006 12:28 PM
Coordenadas de caja con bordes redondos
Posted: Thu Dec 11, 2008 07:35 AM
Pedro

Yo la utilizo, y no me da ningun problema
 //-------------------
 Function CAJAROUND(nArriba,nIzq,nAbajo,nDerecha,a,b,oPrn,oPen,oBrush)
 LOCAL hOldPen, xCor := {} , yCor := {}
 local hOldBrush
 // Pasamos coordenadas de cms a pixel
 xCor := oPrn:Cmtr2Pix(nArriba,nIzq)
 yCor := oPrn:Cmtr2Pix(nAbajo,nDerecha)
 // Guardamos el Lapiz y la brocha que teniamos
 hOldPen   := SelectObject( oPrn:hDcOut, oPen:hPen )
 hOldBrush := SelectObject( oPrn:hDcOut, oBrush:hBrush )
 //Dibujamos el rectangulo redondeado
 roundrect(oPrn:hdcOut,xCor[1],xCor[2],yCor[1],yCor[2],a,b)
 // y  seleccionamos el que habiamos guardado
 selectObject( oPrn:hDcOut, hOldPen )
 selectObject( oPrn:hDcOut, hOldBrush )
 RETURN NIL

Mira a ver si te funciona, con éstas diferencias.

Saludos

Jose Luis
--------------------------

Saludos



Jose Luis
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
Coordenadas de caja con bordes redondos
Posted: Thu Dec 11, 2008 04:04 PM

Pedro,
Prueba a usar cmtr2pix como te mencionan jose luis y manuel, te debe funcionar,,, a mi tambien me funciona bien asi.
salu2
paco

____________________

Paco
Posts: 464
Joined: Tue Mar 21, 2006 07:30 PM
Coordenadas de caja con bordes redondos
Posted: Thu Dec 11, 2008 06:33 PM

Hola Manuel, Jose Luis, Francisco
No se si os habeis fijado en el ejemplo que puse al principio, pero si os fijais un poco, vereis que el problema era, que las coordenadas en FW 2.7 son xCor[1], xCor[2],yCor[1], yCor[2], eso es lo que no funciona en FW8.04, se ha debido modificar. En el ejemplo de Manuel, las coordenadas son xCor[2],xCor[1],yCor[2], yCor[1] y esto si que funciona. El ejemplo de Jose Luis es el mismo que el mio, si lo prueba verá que no le funciona, cosa curiosa, pues en el ejemplo de la caja normal, sin bordes redondeados, funcionan las coordenadas xCor[1], xCor[2], yCor[1], yCor[2], de ahí que preguntara si desde la version 2.7 se habian cambiado las coordenadas en la funcion roundrect(), como así he comprobado.

Un saludo a todos y gracias por la ayuda.
Pedro

Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO

Continue the discussion