Page 1 of 1

TTaskPanel collapsed como?

Posted: Fri Mar 27, 2020 6:32 pm
by leandro
Buenas tardes para todos, estoy usando la clase TExplorerBar, pero requiero que algunos de los paneles se muestren colapsados o contraídos, pero no encuentro la forma.

Lo intente así, pero no funciona.

Code: Select all

   oPanel5 = oExpPqr:AddPanel( "SALIDA", ".\Res\salida.png",20 ,25, 0  )
   oPanel5:SetColor( RGB( 0, 0, 255 ), CLR_WHITE)
   oPanel5:AddLink( "Cerrar Ventana", {|| oWChPq:End() }, "#8606" )
   oPanel5:lCollapsed := .T.
De antemano gracias

LEANDRO AREVALO

Re: TTaskPanel collapsed como?

Posted: Fri Mar 27, 2020 7:42 pm
by cnavarro
Debería funcionar con lCollapsed := .T.
Prueba despues de definir todos tus panels, poniendo esto: oExplBar:CheckScroll()

Re: TTaskPanel collapsed como?

Posted: Fri Mar 27, 2020 8:21 pm
by Cgallegoa
Leandro, Cristobal

Parece que es un bug en la clase TTaskPanel

El proceso de expandir/contraer el panel se da en el Method LButtonUp

Code: Select all

METHOD LButtonUp( nRow, nCol, nFlags ) CLASS TTaskPanel

   local n, hWndFocus

   if nRow < ::nTitleHeight

    // En la siguiente línea se produce el problema, pues no importa si le indicas lCollapsed .T. o .F., prevalecerá
    // el resultado de ::nHeight > ::nTitleHeight , ignorando el valor que le hayas dado a lCollapsed
      if ( ::lCollapsed := ::nHeight > ::nTitleHeight )   
         ::nHeight = ::nTitleHeight
         for n = ::nIndex  + 1 to Len( ::oWnd:aPanels )
            ::oWnd:aPanels[ n ]:nTop -= ::nBodyHeight
         next

        ....
 
Una solución temporal y a medio pelo, es que luego de crear el panel que quieres monstrar contraído escribas:

Code: Select all

oPanel1:nHeight := oPanel1:nTitleHeight
De esta manera lo pondrá como quieres. El problema..... es que al expandirlo nuevamente no controla bien el alto total del objeto panel.

Te toca ir probando, pero creo que por ahi van los tiros, mientras los gurús de FW nos dan la pauta para una correcta solución.

Re: TTaskPanel collapsed como?

Posted: Fri Mar 27, 2020 8:22 pm
by Cgallegoa
Cgallegoa wrote:Leandro, Cristobal

Parece que es un bug en la clase TTaskPanel

El proceso de expandir/contraer el panel se da en el Method LButtonUp

Code: Select all

METHOD LButtonUp( nRow, nCol, nFlags ) CLASS TTaskPanel

   local n, hWndFocus

   if nRow < ::nTitleHeight

    // En la siguiente línea se produce el problema, pues no importa si le indicas lCollapsed .T. o .F., prevalecerá
    // el resultado de ::nHeight > ::nTitleHeight , ignorando el valor que le hayas dado a lCollapsed
      if ( ::lCollapsed := ::nHeight > ::nTitleHeight )   
         ::nHeight = ::nTitleHeight
         for n = ::nIndex  + 1 to Len( ::oWnd:aPanels )
            ::oWnd:aPanels[ n ]:nTop -= ::nBodyHeight
         next

        ....
 
Una solución temporal y a medio pelo, es que luego de crear el panel que quieres mostrar contraído escribas:

Code: Select all

oPanel1:nHeight := oPanel1:nTitleHeight
De esta manera lo pondrá como quieres. El problema..... es que al expandirlo nuevamente no controla bien el alto total del objeto panel.

Te toca ir probando, pero creo que por ahi van los tiros, mientras los gurús de FW nos dan la pauta para una correcta solución.

Re: TTaskPanel collapsed como?

Posted: Fri Mar 27, 2020 8:35 pm
by EBM
Hola Leando,

Como bien dice Carlos, es un bug en la clase, yo lo he "medio solucionado" de la siguiente forma aunque a veces y dependiendo la resolucion del monitor
no me respeta bien el scroll vertical al expandir/contraer, pero de alguna forma me funciona de momento. Esto lo vi en algun post de otro colega que no recuerdo el nombre, sólo lo adapté a mis necesidades, espero te funcione.

Lo que hice fue agregarle un método a la clase ExplBar asi:

EXTEND CLASS TExplorerBar WITH METHOD Collapse

y despues en mi codigo, llamo al metodo asi:

oExplBar:Collapse( aPanel, 2 ) // <-- Estoy contrayendo el Panel 2
aPanel[ 2 ]:lCollapsed := .t.

Y aqui te paso el metodo:

STATIC FUNCTION Collapse( aPanel, nCual ) // Metodo de TExplorerBar
LOCAL Self := HB_QSelf(), c

aPanel[ nCual ]:nHeight := aPanel[ nCual ]:nTitleHeight

For c := nCual + 1 To Len( aPanel )
aPanel[ c ]:nTop -= aPanel[ nCual ]:nBodyHeight
Next

Self:Refresh()
Self:CheckScroll()

Return NIL

Saludos!

Eduardo Borondón Muñiz

Re: TTaskPanel collapsed como?

Posted: Fri Mar 27, 2020 10:37 pm
by leandro
Gracias a todos por las respuestas.

Cristobal, coloque la linea de código de mencionaste, pero no ocurre nada que pueda notar.

Carlos de la manera que dices, obtengo el siguiente resultado:

Image

Voy a intentar de la manera que dice eduardo y comento.