Revisando por alto el treeview

Revisando por alto el treeview

Postby mastintin » Thu Aug 21, 2014 8:47 pm

Veo que no es el treeview de fivewin y existen muchos cambios ... como primera aproximación seria bueno tener un comando que cree el treeview desde recursos ....
Una primera modificación :

A añadir al código de fivewin ( yo no he encontrado que tengamos algo )

En fivewin.ch

Code: Select all  Expand view


#xcommand REDEFINE TREEVIEW [<oTV>] ;
             [ ID <nId> ];
             [ <of: OF, WINDOW, DIALOG> <oWnd> ] ;
             [ <design: DESIGN> ] ;
             [ COLOR <nClrFore> [,<nClrBack>] ] ;
             [ MESSAGE <cMsg> ] ;
             [ ON CHANGE <uChange,...> ] ;
        => ;
          [ <oTV> := ] TTreeView():Redefine( <nId>, <oWnd>, <nClrFore>, <nClrBack>,;
                                        [<.design.>], [<cMsg>], [ { | nOption, nOldOption | <uChange> } ] )

 


y en la clase ...

Code: Select all  Expand view


METHOD ReDefine( nId, oWnd, nClrFore, nClrBack, lDesign, cMsg , bChange ) CLASS TTreeView  // añadido bChange

  ......

   ::nClrText = nClrFore
   ::nClrPane = nClrBack
   ::bChanged  = bChange  // añadido

.....
   
 
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Revisando por alto el treeview

Postby Antonio Linares » Thu Aug 21, 2014 9:49 pm

Manuel,

Implementado, muchas gracias! :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41187
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Revisando por alto el treeview

Postby mastintin » Fri Aug 22, 2014 3:16 pm

Tenemos 2 problemas localizados con los treeview de fwh ...
1.- Si usamos SetDlgGradient() los items no se refrescan correctamente al hacer scroll .
2.- En el treeview de easyreport se usas checks pero solo en algunos de los items . Si activamos los checks para los treeview se activan en todos los nodos .
Una opción seria poder ocultar los checks en los nodos que no se utilicen ...
He encontrado este código que hace eso :

private void HideCheckBox(TreeView tvw, TreeNode node)
{
TVITEM tvi = new TVITEM();
tvi.hItem = node.Handle;
tvi.mask = TVIF_STATE;
tvi.stateMask = TVIS_STATEIMAGEMASK;
tvi.state = 0;
SendMessage(tvw.Handle, TVM_SETITEM, IntPtr.Zero, ref tvi);
}

Antonio seria bueno implementar un metodo nuevo que use este código .
P.D. para mantener la compatibilidad con versiones antiguas de fwH tendremos que adjuntar un archivo ER_Treeview que sea una clase derivada de ttreeview pero que incluya estos cambios .
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Revisando por alto el treeview

Postby Antonio Linares » Fri Aug 22, 2014 3:26 pm

Manuel,

Vamos a enfocarnos en que funcione aunque haya que modificar FWH y ya me encargo yo de buscar la compatibilidad con versiones anteriores :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41187
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Revisando por alto el treeview

Postby mastintin » Fri Aug 22, 2014 11:32 pm

Ya tengo casi terminado el tema de los treeview y sin ningún cambio en el código de la clase :-) .
Me ha tenido loco por nombres de bmps que aparecían en el código y que daba por hecho que existían y luego no estaban ...
Al final falta incorporar unos bmps mas a las imagelist .
Tenemos un problema con el refresco del treeview si colocamos el dialogo con degradado de fondo por lo que de momento lo he deshabitado .
Subido el código al repositorio .
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Revisando por alto el treeview

Postby mastintin » Sat Aug 23, 2014 10:05 am

Posibles mejoras para el treeview de Fwh :

Code: Select all  Expand view


METHOD New( nTop, nLeft, oWnd, nClrFore,;
            nClrBack, lPixel, lDesign, nWidth, nHeight, cMsg, lCheckBoxes, bChange, acResName, acBmpFile ) CLASS TTreeView  // añadido ultimo parámetro un array de nombres de bmp en recursos
 ......
 if lDesign
      ::CheckDots()
   endif
 
   IF ! Empty( acResname )  .or.  ! Empty( acBmpFile )
      ::CreateTreeImageList( acResname , acBmpFile )   // procesamos y creamos el ImageList
   endif

return Self

 ReDefine( nId, oWnd, nClrFore, nClrBack, lDesign, cMsg , bChange,, acResname, acBmpFile )  CLASS TTreeView // añadido ultimo parámetro un array de nombres de bmp en recursos
....

  oWnd:DefControl( Self )
   IF ! Empty( acResname )  .or.  ! Empty( acBmpFile )
      ::CreateTreeImageList( acResname , acBmpFile )   // procesamos y creamos el ImageList
   endif

return Self

//------------------------------------------------------------------------------


METHOD CreateTreeImageList( acResname,  acBmpFile  )  CLASS TTreeView  // nuevo metido procesa el array y crea imagelist

 LOCAL i,oBmp
 LOCAL nLen
 LOCAL oImageList := TImageList():New()

if !Empty (acResname)
   nLen:= Len( acResname )
   oBmp = TBitmap():Define( acResName[i], ::oWnd )
   oImageList:Add( oBmp,setMasked( oBmp:hBitmap, ::nClrPane ) )
endif

if !Empty ( acBmpFile )
   nLen:= Len( acBmpFile )
FOR i=1 TO nLen
     oBmp = TBitmap():Define( ,acBmpFile[i], ::oWnd )
     oImageList:Add( oBmp,setMasked( oBmp:hBitmap, ::nClrPane ) )
 NEXT
endif

 ::SetImageList( oImageList )

RETURN nil


// function setMasked( oBmp , mascara  )  que  genera la mascara del bmp  ... He probado el Methodo de imagelist addmasked y no va como esperaba .

#pragma BEGINDUMP

    #include <windows.h>
    #include <hbapi.h>

void MaskRegion(HDC hdc, RECT * rct,
                       COLORREF cTransparentColor,
                       COLORREF cBackgroundColor);


 HB_FUNC( SETMASKED ) // ( hBitmap , lMaskColor) --> nil
{
   HBITMAP hBitmap ;
   DWORD lMaskColor ;
   HDC     hDC ;
   BITMAP  Bmp ;
   RECT    rct ;

   hBitmap  =  ( HBITMAP ) hb_parnl( 1 ) ;
   lMaskColor   =  hb_parnl( 2 ) ;

   hDC      = CreateCompatibleDC( NULL ) ;
   GetObject( hBitmap, sizeof( BITMAP ), ( LPSTR ) &Bmp ) ;
   SelectObject( hDC, ( HGDIOBJ ) LOWORD( hBitmap ) ) ;

   rct.top = 0 ;
   rct.left = 0 ;
   rct.right = Bmp.bmWidth - 1 ;
   rct.bottom = Bmp.bmHeight -1 ;

   MaskRegion( hDC, &rct, GetPixel( hDC, 0, 0 ), lMaskColor ) ;

   DeleteDC( hDC ) ;

}
#pragma ENDDUMP

 
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm


Return to EasyReport, EasyDialog y EasyPreview

Who is online

Users browsing this forum: No registered users and 2 guests