FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Footer con TWBrowse de HC
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Footer con TWBrowse de HC
Posted: Tue Dec 30, 2008 09:00 PM

Buenas tardes,

Tengo un browse (TWBROWSE HC) que tiene seis columnas con sus respectivos seis Headers.

De estas seis columnas, sólo una necesita un total a colocar en el Footer. Mi consulta es si se puede hacer que, teniendo seis columnas pueda dibujarse [u:12no5678]un solo footer[/u:12no5678] marginado sobre la derecha para que se vea el total de la última columna.

Gracias.

Rolando :D

Posts: 476
Joined: Sat Feb 03, 2007 06:36 AM
Re: Footer con TWBrowse de HC
Posted: Wed Dec 31, 2008 12:56 AM
Rolando, si se puede, y lo hago de esta forma:

    
            nTDebe := 0
            nTHaber := 0
            oLbx:lDrawFooters := .t.
            oLbx:aFooters := { "","Suma Iguales:", Transform( nTDebe, "999,999,999.99" )+" ", Transform( nTHaber, "999,999,999.99" )+" " }
            oLbx:aFJustify:={0,1,1,1}  //Justificación 0=Izquierda, 1=derecha, 2=Centro


Espero te sirva.

Saludos, y Feliz Año Nuevo!!

Carlos Sincuir
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Footer con TWBrowse de HC
Posted: Wed Dec 31, 2008 09:19 AM

Carlos,

Te agradezco por contestar, pero como tu indicas es justamente como lo hago y no es lo que quiero lograr.

Del modo que sugieres se obtienen cuatro columnas en el footer y lo que quiero hacer es que todo el footer sea una sola columna con el total.

Saludos y feliz año nuevo.

R :roll: lando

Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
Re: Footer con TWBrowse de HC
Posted: Wed Dec 31, 2008 03:49 PM

Rolando,
Lo que quieres hacer no se puede, yo lo trate de hacer, pero hay que meterle mano a la clase y directamente al programa en .c cosa que no se me da :-(
salu2
paco

____________________

Paco
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Footer con TWBrowse de HC
Posted: Wed Dec 31, 2008 07:16 PM

Paco,

Gracias por responder. Seguiré como venía haciéndolo. Lo que pasa es que uno se entusiasma y está siempre queriendo cambiarle todo.

Feliza año nuevo para tí y para todo el foro.

R :D olando

Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Footer con TWBrowse de HC
Posted: Wed Dec 31, 2008 08:13 PM
Paco,

Tu me diste la idea. Retoqué un poquito la clase de Hernán y logré que haga lo que deseaba.



Saludos.

Roland :-)
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Footer con TWBrowse de HC
Posted: Thu Jan 01, 2009 11:01 PM
Me olvidé de publicar la reforma,

Hay que reformar el METHOD DrawFooters:


If Len( aFooters ) <> ( nLen:= Len( ::GetColSizes() ) )

	  * ASize( aFooters, nLen )
////////////////////////////////////////////////////////////////////////////////////////
	if len(aFooters) == 1                         // by R. Cerella para footer 1 sola columna
	   ASize( aFooters, 1 )                       
	else                                                 
	   ASize( aFooters, nLen )                 
	endif                                              
////////////////////////////////////////////////////////////////////////////////////////
	 AEval( aFooters, {|uElem,n| ;
                aFooters[n]:= If( !"C"$ValType(uElem),"",uElem) } )
EndIf


Saludos.

Rolando :-)
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
Re: Footer con TWBrowse de HC
Posted: Fri Jan 02, 2009 07:01 PM

Gracias Rolando, enseguida adapto la wbrowse
salu2
Paco

____________________

Paco
Posts: 310
Joined: Sun Jan 08, 2006 10:09 PM
Re: Footer con TWBrowse de HC
Posted: Mon Jan 05, 2009 11:37 AM
Estimados,

Fiz pequenas alteracoes em minha HC-TWBrowse:
CLASS TWBrowse FROM TControl

   DATA   bFooter
   DATA   lSumFooter INIT .f.
   ...

//----------------------------------------------------------------------------//
METHOD ReDefine( nId, bLine, oDlg, aHeaders, aColSizes, cField, uVal1, uVal2,;
                 bChange, bLDblClick, bRClick, oFont, oCursor,;
                 nClrFore, nClrBack, cMsg, lUpdate, cAlias,;
                 bWhen, bValid, bLClick, aActions ) CLASS TWBrowse

   ...
   ::bFooter    = {||.t.}
   ::lSumFooter = .f.
   ...

return Self

//----------------------------------------------------------------------------//
METHOD Paint() CLASS TWBrowse

   local n := 1, nSkipped := 1, nLines
   local nSkip, nRealSkip

   if ::lIconView
      ::DrawIcons()
      return 0
   endif

   if ::nRowPos == 1 .and. ! Empty( ::cAlias ) .and. ;
      Upper( ::cAlias ) != "ARRAY" .and. Upper( ::cAlias ) != "_TXT_"
      if ! ( ::cAlias )->( EoF() )
         ( ::cAlias )->( DbSkip( -1 ) )
         if ! ( ::cAlias )->( BoF() )
            ( ::cAlias )->( DbSkip() )
         endif
      endif
   endif

   // **********
   if ::lSumFooter
      ::lDrawFooters  := .t.                      
      ::aFJustify     := ::aJustify
   endif
   // **********

   ...

return 0

//----------------------------------------------------------------------------//
METHOD Refresh( lSysRefresh ) CLASS TWBrowse

    If ::Cargo != Nil .or. ; // Tree
       !( ::nLen := Eval( ::bLogicLen ) ) > 0
       Super:Refresh()
    Else // Si hay elementos en la tabla
       DEFAULT lSysRefresh:= .f.
       If "B"$ValType( ::aFooters )
          ::DrawFooters()
       EndIf
       Super:Refresh( .f. ) // No borrar fondo, WBrwPane se encarga de eso !!
       If lSysRefresh       // OJO Usar con cuidado porque puede hacer agotar
          SysRefresh()      // el Stack :-(
       EndIf

       // **********
       if ::lSumFooter
          eval( ::bFooter )
       endif
       // **********

    EndIf
   return 0


Em meus aplicativos uso:
...
REDEFINE LISTBOX oLbx FIELDS ... ;
                    HEADERS ... ;
                    FIELDSIZES ... ;
                    ID 999 OF oDlg
                    //
                    oLbx:aJustify      := { .f., .f., 1, .f., 1, 1 }
                    //
                    oLbx:lSumFooter    := .t.                      
                    oLbx:bFooter       := {|| ( aSumFooter := nSumFooter( oLbx, "CLIENTS", {0,0,0,0,1,1} ) ) } 
                    oLbx:aFooters      := { "", "", "", "", 0, 0 }
                    //
...


...
function nSumFooter( oSUMLbx, cSUMArea, aSUMArray )
   // oSUMLbx   - Objeto Browse
   // cSUMArea  - Alias usado no momento
   // aSUMArray - Array de 0s e 1s onde 0-Nao soma e 1-Soma
   local aSUMLbx := {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
   nSUMArea := Select()
   dbSelectArea( cSUMArea )
   dbGotop()
   do while .not. eof()
      for n = 1 to Len( aSUMArray )
          if aSUMArray[n] = 1 
             aSUMLbx[n] := aSUMLbx[n] + Eval( GenBlockN( oSUMLbx:bLine, n ) )
          endif
      next
      skip
   enddo
   for n = 1 to Len( aSUMArray )
       oSUMLbx:aFooters[n] := iif( aSUMArray[n] = 0, "", transf( aSUMLbx[n], "@E 999999.99" ) )
   next
   dbGotop()
   dbSelectArea( nSUMArea )
   return aSUMLbx

static function GenBlockN( bLine, nPos )
   return { || val( iif(","$Eval(bLine)[nPos],;
                    substr(Eval(bLine)[nPos],1,at(",",Eval(bLine)[nPos])-1)+"."+substr(Eval(bLine)[nPos],at(",",Eval(bLine)[nPos])+1,3),;
                    Eval(bLine)[nPos]) ) }
...

Continue the discussion