xBrowse con full grid

xBrowse con full grid

Postby César E. Lozada » Mon Oct 03, 2011 5:57 pm

Obviamente que es cuestión de gustos personales, pero, para mis preferencias, la región en blanco (figura izquierda) que queda en la parte inferior de un xbrowse cuando se muestra una array con menos elementos que los que pueden dibujarse, disminuye las elegantes características visuales de este control.

Image

Comparto con quienes coincidan conmigo las modificaciones necesarias que permiten dibujar xbrowse con full grid, como se muestra en la figura derecha.

1) En la clase txBrowse:
1.1) Variable que controla si se pinta el full grid: agregar: DATA lFullGrid INIT .T.
1.2) Pintado de celdas: En el método Paint, agregar variable Local nArrayAt e insertar el siguiente código justo antes de /* Paint lines */
Code: Select all  Expand view


  IF ::lFullGrid
     nArrayAt:=::nArrayAt    //Save current value
     do while nRow<=nBrwHeight
       ::nArrayAt:=nRowPos  // Case it's reqired by ::bClrStd
       for nFor := 1 to nLast
         if aCols[ nFor ] > nBrwWidth
            exit
         endif
         oCol := ::ColAtPos( nFor )
         oCol:PaintData( nRow, aCols[ nFor ], nHeight, .F., .f., nFor, nRowPos )
       next

      // We must also paint some times after the last visible column
      if aCols[ nLast + 1 ] < nBrwWidth
         nTemp     := nRow + nHeight
         nTemp2    := aCols[nLast + 1]
          if nColStyle < LINESTYLE_INSET
            nTemp2--
          endif
          if ! ( ::lTransparent == .t. )
             hBrush := CreateSolidBrush( Eval( ::bClrStd )[ 2 ] )
             FillRect( hDC, {nRow, nTemp2, nTemp, nBrwWidth }, hBrush )
             DeleteObject( hBrush )
          endif
        endif

        nRowPos++
        nRow += nRowHeight
     enddo
    ::nArrayAt:=nArrayAt    //restore value
   ENDIF
   /*
      Paint lines
    */


   


1.3) Pintado de lineas: En el mismo método Paint(), un poco más abajo, comentar nTemp2 y agregar la líne indicada
Code: Select all  Expand view

              if nRowStyle > 0
                  nRow   := ::HeaderHeight() - 1
                  //nTemp2 := ::nDataRows
                  nTemp2 := if(::lFullGrid,nMaxRows,::nDataRows)  // --> Need go until bottom
         


2) En la clase txBrwColumn, método PaintData, cambiar
if ::bStrData != nil //.and. !::hChecked
por
if ::bStrData != nil .and. nPaintRow<=::oBrw:nLen //.and. !::hChecked


ADVERTENCIA: PaintData() es llamado ahora con valores de ::nArrayAt superiores a la longitud del array, lo que puede producir errores de rango en el acceso al array en tiempo de ejecución. Analice y corrija los codeblocks que contengan ::nArrayAt o ::aRow (y quizás otros).

Ejemplo:
oBrw:bClrStd:={|| {if(oBrw:aRow[1],CLR_HBLUE,CLR_HGRAY),CLR_WHITE}}
va a generar un error cuando se llame con un valor superior a la longitud del array y para evitarlo debe ser cambiado por:
oBrw:bClrStd:={|| {if(oBrw:nArrayAt<=oBrw:nLen .and. oBrw:aRow[1],CLR_HBLUE,CLR_HGRAY),CLR_WHITE}}




Cordiales saludos.
Last edited by César E. Lozada on Mon Oct 03, 2011 7:30 pm, edited 1 time in total.
User avatar
César E. Lozada
 
Posts: 128
Joined: Wed Oct 26, 2005 12:18 pm
Location: Los Teques, Miranda, Venezuela

Re: xBrowse con full grid

Postby Bayron » Mon Oct 03, 2011 6:20 pm

Cesar, un gran aporte, gracias por compartir el codigo, estoy de acuerdo contigo....

Al poder voy a probarlo...

http://forums.fivetechsupport.com/viewtopic.php?f=3&t=22506
=====>

Bayron Landaverry
(215)2226600 Philadelphia,PA, USA
+(502)46727275 Guatemala
MayaBuilders@gMail.com

FWH12.04||Harbour 3.2.0 (18754)||BCC6.5||UEstudio 10.10||
Windows 7 Ultimate

FiveWin, One line of code and it's done...
User avatar
Bayron
 
Posts: 815
Joined: Thu Dec 24, 2009 12:46 am
Location: Philadelphia, PA

Re: xBrowse con full grid

Postby AIDA » Mon Oct 03, 2011 10:58 pm

Cesar muchas gracias que lindo en compartir :D


Saluditos :wink:
Que es mejor que programar? creo que nada :)
Atropellada pero aqui ando :P

I love Fivewin

séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
User avatar
AIDA
 
Posts: 877
Joined: Fri Jan 12, 2007 8:35 pm

Re: xBrowse con full grid

Postby Bayron » Tue Oct 04, 2011 3:48 am

Cesar,
He estado pensando un poco acerca de tu muy acertada contribución, pero creo que crea un poco de problemas con asuntos de compatibilidad, que tu mismo has descrito...

Yo creo que esta forma de pintado mas bien debería ser implementada al usar la opción:
Code: Select all  Expand view
oBrw:lColDividerComplete := .T.

La evaluación de:
Code: Select all  Expand view
oBrw:nArrayAt<=oBrw:nLen

Debería ser hecha en la clase, para evitar errores en ejecución y compatibilidad...

Espero que los amigos de FiveTech, nos den su opinion al respecto... a mi me encantaría que se implementara en xBrowse...
=====>

Bayron Landaverry
(215)2226600 Philadelphia,PA, USA
+(502)46727275 Guatemala
MayaBuilders@gMail.com

FWH12.04||Harbour 3.2.0 (18754)||BCC6.5||UEstudio 10.10||
Windows 7 Ultimate

FiveWin, One line of code and it's done...
User avatar
Bayron
 
Posts: 815
Joined: Thu Dec 24, 2009 12:46 am
Location: Philadelphia, PA

Re: xBrowse con full grid

Postby Antonio Linares » Tue Oct 04, 2011 6:20 am

César, Bayron,

oBrw:lColDividerComplete = .T. parece estar funcionando correctamente :-)

Image
regards, saludos

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

Re: xBrowse con full grid

Postby Bayron » Tue Oct 04, 2011 1:48 pm

Antonio,
Si funciona correctamente, simplemente estaba mencionando usarlo como condición para hacer el pintado que menciona Cesar con oBrw:bClrStd....
=====>

Bayron Landaverry
(215)2226600 Philadelphia,PA, USA
+(502)46727275 Guatemala
MayaBuilders@gMail.com

FWH12.04||Harbour 3.2.0 (18754)||BCC6.5||UEstudio 10.10||
Windows 7 Ultimate

FiveWin, One line of code and it's done...
User avatar
Bayron
 
Posts: 815
Joined: Thu Dec 24, 2009 12:46 am
Location: Philadelphia, PA

Re: xBrowse con full grid

Postby cnavarro » Wed May 15, 2013 1:50 pm

Buenos dias
No consigo el efecto de pintar las divisiones de filas y columnas cuando el array está vacio, o no llega a tener el número de filas que ocupa todo el XBrowse
Adjunto el código que utilizo

Code: Select all  Expand view

Local aF        := {}
Local oBrush


   DEFINE BRUSH oBrush COLOR nRgb( 240, 240, 240 )

   @ 2, 4 XBROWSE oList ARRAY aF ;
      SIZE nAnchoSpl - 4, oWndPrin:nHeight - 30 ;
      OF aPanels1 ;
      COLUMNS 1 ;
      HEADERS "Funcion" ; //"S", "Nombre", "Descripcion" ;
      COLSIZES (nAnchoSpl - 22) ;
      JUSTIFY  nil ; //AL_CENTER, nil, nil ;
      COLORS RGB( 100, 100, 100 ), CLR_WHITE ; //, Rgb( 240, 240, 240 ) ;
      FONT oFontEdt ;
      PIXEL ;
      NOBORDER LINES

   WITH OBJECT oList
      :lFooter          := .F.
      :lRecordSelector  := .F.      

      :lColDividerComplete := .T.

      :l2007            := .F.
      :nMarqueeStyle    := MARQSTYLE_HIGHLROW
      :nRowHeight       := 18
      :bClrSel          := { || { CLR_WHITE, Rgb(128,128,128) } } //Rgb(35,31,32) } }   //CLR_BLUE
      :bClrSelFocus     := { || { CLR_WHITE, Rgb(051,051,051) } }
      :bClrRowFocus     := { || { CLR_BLACK, Rgb(128,128,128) } } //RGB( 120,210,255 ) } }

      :SetBrush( oBrush )
    ENDWITH

      SetParent( oList:hWnd, aPanels1:hWnd )
      oList:CreateFromCode()
      oBrush  := Nil
 


Cómo se ha de configurar?
Gracias
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6504
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: xBrowse con full grid

Postby cnavarro » Sat May 18, 2013 1:03 am

Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6504
Joined: Wed Feb 15, 2012 8:25 pm
Location: España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 46 guests