Footer con TWBrowse de HC

Post Reply
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Footer con TWBrowse de HC

Post by rolando »

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 un solo footer marginado sobre la derecha para que se vea el total de la última columna.

Gracias.

Rolando :D
csincuir
Posts: 305
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala
Contact:

Re: Footer con TWBrowse de HC

Post by csincuir »

Rolando, si se puede, y lo hago de esta forma:

Code: Select all

    
            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
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: Footer con TWBrowse de HC

Post by rolando »

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
Francisco Horta
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: Footer con TWBrowse de HC

Post by Francisco Horta »

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
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: Footer con TWBrowse de HC

Post by rolando »

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
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: Footer con TWBrowse de HC

Post by rolando »

Paco,

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

Image

Saludos.

Roland :D
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: Footer con TWBrowse de HC

Post by rolando »

Me olvidé de publicar la reforma,

Hay que reformar el METHOD DrawFooters:

Code: Select all


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 :D
Francisco Horta
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: Footer con TWBrowse de HC

Post by Francisco Horta »

Gracias Rolando, enseguida adapto la wbrowse
salu2
Paco
____________________
Paco
Rochinha
Posts: 309
Joined: Sun Jan 08, 2006 10:09 pm
Location: Brasil - Sao Paulo
Contact:

Re: Footer con TWBrowse de HC

Post by Rochinha »

Estimados,

Fiz pequenas alteracoes em minha HC-TWBrowse:

Code: Select all

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:

Code: Select all

...
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 }
                    //
...

Code: Select all

...
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]) ) }
...
Post Reply