Page 1 of 1

Xbrowse técnicas de pintado avanzadas

Posted: Thu Sep 29, 2011 9:51 am
by Antonio Linares
Esto es un xbrowse usando el poder que proporciona bPaintText :-)

Image

Aún hay que ajustar las esquinas de los botones, pero la apariencia es muy buena :-)

xbrpaint.prg

Code: Select all

// xbrowse advanced painting examples

#include "FiveWin.ch"
#include "xbrowse.ch"

#define CLR_BACK nRGB( 130, 201, 249 ) 

function Main()

   local oWnd, oFont, oBrw, aItems := { { "One", "Two" }, { "Three", "Four" }, { "Five", "Six" } }
   local hBmp := ReadBitmap( 0, "..\bitmaps\contact.bmp" )

   DEFINE FONT oFont NAME "Segoe UI Light" SIZE 0, -16 

   DEFINE WINDOW oWnd COLOR "BG/B" STYLE nOr( WS_POPUP, WS_VISIBLE )

   @ 9, 37 XBROWSE oBrw ARRAY aItems ;
      SIZE 800, 500 NOBORDER OF oWnd FONT oFont

   oBrw:nDataLines = 4   
   oBrw:lRecordSelector = .F.
   oBrw:lHeader   = .F.
   oBrw:lHScroll  = .F. 
   oBrw:lVScroll  = .F. 
   oBrw:nMarqueeStyle = MARQSTYLE_HIGHLCELL // MARQSTYLE_NOMARQUEE
   oBrw:bClrStd = { || { 0, CLR_BACK } }  
   oBrw:bClrSelFocus = { || { CLR_WHITE, CLR_BACK } } 
   oBrw:SetColor( 0, CLR_BACK )     
   
   oBrw:CreateFromCode() 
   oBrw:SetFocus()  

   oBrw:aCols[ 1 ]:nWidth = 400
   oBrw:aCols[ 2 ]:nWidth = 400
   oBrw:aCols[ 1 ]:bPaintText = { | oCol, hDC, cText, aCoors, aColors, lHighlight | DrawRow( oCol, hDC, cText, aCoors, oFont, lHighlight, hBmp )  }
   oBrw:aCols[ 2 ]:bPaintText = { | oCol, hDC, cText, aCoors, aColors, lHighlight | DrawRow( oCol, hDC, cText, aCoors, oFont, lHighlight, hBmp )  }
      
   ACTIVATE WINDOW oWnd MAXIMIZED ;
      ON CLICK oWnd:End()

return nil

function DrawRow( oCol, hDC, cText, aCoors, oFont, lHighlight, hBmp )

   local hOldFont, nOldMode := SetBkMode( hDC, 0 )
   // local hRgn := CreateRoundRectRgn( { aCoors[ 1 ] +  10, aCoors[ 2 ] + 10, aCoors[ 3 ] - 10, aCoors[ 4 ] - 10 }, 10, 10 )

   // SetWindowRgn( oCol:oBrw:hWnd, hRgn, .F. )

   if lHighlight
      GradientFill( hDC, aCoors[ 1 ] +  10, aCoors[ 2 ] + 10, aCoors[ 3 ] - 10, aCoors[ 4 ] - 10, { ;
           { 2/5, nRGB( 253, 212, 168 ), nRGB( 251, 178, 99 ) },;
         { 3/5, nRGB( 250, 157, 52 ), nRGB( 252, 234, 163 ) } } )
      RoundBox( hDC, aCoors[ 2 ] +  10, aCoors[ 1 ] + 10, aCoors[ 4 ] - 10, aCoors[ 3 ] - 10, 20, 20, CLR_BLUE )
   else
      GradientFill( hDC, aCoors[ 1 ] +  10, aCoors[ 2 ] + 10, aCoors[ 3 ] - 10, aCoors[ 4 ] - 10, { ;
           { 2/5, nRGB( 223, 236, 255 ), nRGB( 197, 222, 255 ) },;
         { 3/5, nRGB( 173, 209, 255 ), nRGB( 189, 217, 255 ) } } )
      RoundBox( hDC, aCoors[ 2 ] +  10, aCoors[ 1 ] + 10, aCoors[ 4 ] - 10, aCoors[ 3 ] - 10, 20, 20, CLR_BLUE )
   endif

   // DeleteObject( hRgn )
   // SetWindowRgn( oCol:oBrw:hWnd, nil, .F. )
   
   DrawBitmap( hDC, hBmp, aCoors[ 1 ] +  18, aCoors[ 2 ] + 23 )
   
   aCoors[ 1 ] += 30
   aCoors[ 2 ] += 80
   DrawText( hDC, cText, aCoors )
   hOldFont = SelectObject( hDC, oFont:hFont )
   SetBkMode( hDC, nOldMode )

   // DrawText( hDC, aItems[ oCol:oBrw:KeyNo ], aCoors )
   // SelectObject( hDC, hOldFont )
   
return nil  

Re: Xbrowse técnicas de pintado avanzadas

Posted: Fri Sep 30, 2011 9:54 am
by MdaSolution
Antonio,
Nice.... If you need to be apologize, ok sorry. But think about me

Re: Xbrowse técnicas de pintado avanzadas

Posted: Fri Sep 30, 2011 8:36 pm
by El Loco
Excelente Troesma !!!
Es como digo, xBrowse esta tomando características tales que lo convierten un lenguaje dentro de otro.
Las cosas que pueden hacerse con el con maravillosas.
Imaginen el mismo ejemplo que muestra Antonio, alineados verticalmente, tenemos un menú, con click derecho otro xbrowse/submenu ... así mil cosas más.
Estoy tratando, todavía no me sale, de darle un formato plano, flat, que me permitiría convertirlo un "tips" .
Quizás no soy claro, pero cuando lo deje operativo, mando un ejemplo, y si Antonio le interesa que lo agregue.

Un abrazo. El Loco

Re: Xbrowse técnicas de pintado avanzadas

Posted: Sat Oct 01, 2011 1:08 am
by GuillermoMtz
Wow! :o , Excelente Antonio.
Realmente me va ser muy Util, Saludos.

El loco, si concluyes con eso seria magnifico, estoy muy interesado en lo
que propones le daria buena vista a los sistemas. Saludos y Exito!
:D