FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour XBROWSE y GDIP - ahora por columna - Solucionado
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
XBROWSE y GDIP - ahora por columna - Solucionado
Posted: Thu Aug 14, 2025 11:34 PM
Estimados, tengo el siguiente caso:
en un browse, tengo una columna que muestra unos checkbox y otra columna que muestra unas imagenes, el caso es que si pongo la data
oBrw:lGDIP := .t., las imagenes se muestra muy bien, trasparencia y alpha chanel dado que usa gdip para dibujar la image, pero los chekbox se muestran un poco distorcionados, si oBrw:lGDIP := .f. es inverso, los checkbox muy bien, pero la imagen distorcionada, por ello intente poder asignar el lGDIP a cada columna para poder usarlo segun convenga, para esto agregue la data lGDIP a la clase TXBrwColumn con valor inicial a Nil, y
modifique el metodo PaintCellImage, pero segun veo ese metodo no es llamado, bajo nunca.



   WITH OBJECT oBrw
      :lGDIP := FALSE
...
      :aCols[ 07 ]:SetCheck( { "BMS_CHECKON2", "BMS_CHECKOFF2" } )
      :aCols[ 09 ]:nHeadStrAlign := AL_CENTER
      :aCols[ 09 ]:AddResource( "PNG_STAR1" )
      :aCols[ 09 ]:AddResource( "PNG_STAR2" )
      :aCols[ 09 ]:AddResource( "PNG_STAR3" )
      :aCols[ 09 ]:bStrData     := ""
      :aCols[ 09 ]:bBmpData     := {|uVal,lSel,oCol| Clie_StarCount( uVal ) }
      :aCols[ 09 ]:lGDIP        := TRUE
no he podido hacerlo, todoa ayuda es bienvenida.
CLASS TXBrwColumn
  ...
  DATA lGDIP
  ...
  
METHOD PaintCellImage( cImageData, oRect ) CLASS TXBrwColumn

   local aBmpPal, aRect, ResizeMode, aImgRect
   local lGDIP
   
   aRect    := oRect:aRect
   if ::aImgRect == nil
      ResizeMode  := ::lBmpStretch
   else
      aImgRect    := XEval( ::aImgRect, Self )
      if ValType( aImgRect ) $ 'CN'
         ResizeMode  := aImgRect
      elseif ValType( aImgRect ) == 'A'
         if Len( aImgRect ) > 4
            ResizeMode := aImgRect[ 5 ]
         else
            ASize( aImgRect, 4 )
         endif
         aRect := oRect:Modify( aImgRect, .t. ):aRect
      endif
   ENDIF
   lGDIP := iif( ::lGDIP, ::oBrw:lGDIP, ::lGDIP )
   //aBmpPal     := ::oBrw:ReadImage( cImageData,, ::oBrw:lGDIP )
   aBmpPal     := ::oBrw:ReadImage( cImageData,, lGDIP )
   if !Empty( aBmpPal ) .and. !Empty( aBmpPal[ 1 ] )
      ::oBrw:DrawImage( aBmpPal, aRect, ;
            ::lBmpTransparent, ResizeMode, ::nAlphaLevel(), .f., ::cAlign( ::nDataBmpAlign ) )
      PalBmpFree( aBmpPal[ 1 ], aBmpPal[ 2 ] )
   endif
   aBmpPal  := nil

return nil
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: XBROWSE y GDIP - ahora por columna - Solicitud
Posted: Thu Aug 14, 2025 11:44 PM
Lo logre
   WITH OBJECT oBrw
      :lGDIP := FALSE
 ...
      :aCols[ 07 ]:SetCheck( { "BMS_CHECKON2", "BMS_CHECKOFF2" } )
      :aCols[ 09 ]:nHeadStrAlign := AL_CENTER
      :aCols[ 09 ]:lGDIP        := TRUE //importante, definir a true antes de agregar los recursos.
      :aCols[ 09 ]:AddResource( "PNG_STAR1" )
      :aCols[ 09 ]:AddResource( "PNG_STAR2" )
      :aCols[ 09 ]:AddResource( "PNG_STAR3" )
...
CLASS TXBrwColumn
  ...
  DATA lGDIP
  ...
  
static function fnAddBitmap( o, uBmp, aResize )

   local nBmpNo := 0, aBmpPal, oBrw
   local lGDIP //add

   oBrw     := If( o:IsKindOf( 'TXBROWSE' ), o, o:oBrw )
   lGDIP    := IIf( isnil( o:lGDIP ), oBrw:lGDIP, o:lGDIP ) //add

   if ValType( uBmp ) == 'A' .and. !FW_CreateBitmap( uBmp,,.t. )
      AEval( uBmp, { |u| nBmpNo := fnAddBitmap( o, u, aResize ) } )
      return nBmpNo
   endif

   if HB_ISNUMERIC( uBmp ) .and. ISHBITMAP( uBmp )
      aBmpPal  := { uBmp, 0, nBmpWidth( uBmp ), nBmpHeight( uBmp ), HasAlpha( uBmp ), cValToChar( uBmp ), .f., "BITMAP" }
   else
      //aBmpPal  := oBrw:ReadImage( uBmp, aResize, oBrw:lGDIP .and. Empty( aResize ) )
      aBmpPal  := oBrw:ReadImage( uBmp, aResize, lGDIP .and. Empty( aResize ) ) //mod
   endif

   AAdd( o:aBitmaps, aBmpPal )
   nBmpNo   := Len( o:aBitmaps )

return nBmpNo
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: XBROWSE y GDIP - ahora por columna - Solucionado
Posted: Thu Aug 14, 2025 11:53 PM

Me queda la duda que paso con el metodo PaintCellImage, codigo innecesario?

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)

Continue the discussion