TExplorerBar Bitmaps

TExplorerBar Bitmaps

Postby Francisco Horta » Tue Mar 17, 2015 11:26 pm

Hola foro,

Tengo una venta MDI con una explorerbar y sus imagenes desde recursos, el problema es que esas imagenes no las libera de memoria, por lo tanto si esa ventana que consta de 8 imagenes la abro y la cierro 5 veces por ejemplo, me deja colgadas 40 bmp, como soluciono esto?

Code: Select all  Expand view

17/03/2015 17:20:39: G:\DESARROLLO\Fuentes\xharbour\Vehiculos\BIN\carros.Exe -- BMP,386206757,TCATALOGO:LOADWINDOW(124)->TCATALOGO:NEW(89)->(b)TAPPLICATION:SHOWWINDOW(484)->TTOOLBAR:COMMAND(219)->TWINDOW:COMMAND(1100)->TMDIFRAME:COMMAND(255)->TMDIFRAME:HANDLEEVENT(0)->_FWH(3345)->WINRUN(0)->TMDIFRAME:ACTIVATE(1050)->TAPPLICATION:SHOWWINDOW(529)->MAIN(83)
   
17/03/2015 17:20:39: G:\DESARROLLO\Fuentes\xharbour\Vehiculos\BIN\carros.Exe -- BMP,-1190851701,TCATALOGO:LOADWINDOW(124)->TCATALOGO:NEW(89)->(b)TAPPLICATION:SHOWWINDOW(484)->TTOOLBAR:COMMAND(219)->TWINDOW:COMMAND(1100)->TMDIFRAME:COMMAND(255)->TMDIFRAME:HANDLEEVENT(0)->_FWH(3345)->WINRUN(0)->TMDIFRAME:ACTIVATE(1050)->TAPPLICATION:SHOWWINDOW(529)->MAIN(83)
   
17/03/2015 17:20:39: G:\DESARROLLO\Fuentes\xharbour\Vehiculos\BIN\carros.Exe -- BMP,1610944648,TCATALOGO:LOADWINDOW(124)->TCATALOGO:NEW(89)->(b)TAPPLICATION:SHOWWINDOW(484)->TTOOLBAR:COMMAND(219)->TWINDOW:COMMAND(1100)->TMDIFRAME:COMMAND(255)->TMDIFRAME:HANDLEEVENT(0)->_FWH(3345)->WINRUN(0)->TMDIFRAME:ACTIVATE(1050)->TAPPLICATION:SHOWWINDOW(529)->MAIN(83)
   
17/03/2015 17:20:39: G:\DESARROLLO\Fuentes\xharbour\Vehiculos\BIN\carros.Exe -- BMP,-872083370,TCATALOGO:LOADWINDOW(124)->TCATALOGO:NEW(89)->(b)TAPPLICATION:SHOWWINDOW(484)->TTOOLBAR:COMMAND(219)->TWINDOW:COMMAND(1100)->TMDIFRAME:COMMAND(255)->TMDIFRAME:HANDLEEVENT(0)->_FWH(3345)->WINRUN(0)->TMDIFRAME:ACTIVATE(1050)->TAPPLICATION:SHOWWINDOW(529)->MAIN(83)
   
17/03/2015 17:20:39: G:\DESARROLLO\Fuentes\xharbour\Vehiculos\BIN\carros.Exe -- BMP,-385544131,TCATALOGO:LOADWINDOW(124)->TCATALOGO:NEW(89)->(b)TAPPLICATION:SHOWWINDOW(484)->TTOOLBAR:COMMAND(219)->TWINDOW:COMMAND(1100)->TMDIFRAME:COMMAND(255)->TMDIFRAME:HANDLEEVENT(0)->_FWH(3345)->WINRUN(0)->TMDIFRAME:ACTIVATE(1050)->TAPPLICATION:SHOWWINDOW(529)->MAIN(83)
   
17/03/2015 17:20:39: G:\DESARROLLO\Fuentes\xharbour\Vehiculos\BIN\carros.Exe -- BMP,1946488534,TCATALOGO:LOADWINDOW(124)->TCATALOGO:NEW(89)->(b)TAPPLICATION:SHOWWINDOW(484)->TTOOLBAR:COMMAND(219)->TWINDOW:COMMAND(1100)->TMDIFRAME:COMMAND(255)->TMDIFRAME:HANDLEEVENT(0)->_FWH(3345)->WINRUN(0)->TMDIFRAME:ACTIVATE(1050)->TAPPLICATION:SHOWWINDOW(529)->MAIN(83)
   
17/03/2015 17:20:39: G:\DESARROLLO\Fuentes\xharbour\Vehiculos\BIN\carros.Exe -- BMP,-150663703,TCATALOGO:LOADWINDOW(124)->TCATALOGO:NEW(89)->(b)TAPPLICATION:SHOWWINDOW(484)->TTOOLBAR:COMMAND(219)->TWINDOW:COMMAND(1100)->TMDIFRAME:COMMAND(255)->TMDIFRAME:HANDLEEVENT(0)->_FWH(3345)->WINRUN(0)->TMDIFRAME:ACTIVATE(1050)->TAPPLICATION:SHOWWINDOW(529)->MAIN(83)
   
17/03/2015 17:20:39: G:\DESARROLLO\Fuentes\xharbour\Vehiculos\BIN\carros.Exe -- BMP,-284869693,TCATALOGO:LOADWINDOW(124)->TCATALOGO:NEW(89)->(b)TAPPLICATION:SHOWWINDOW(484)->TTOOLBAR:COMMAND(219)->TWINDOW:COMMAND(1100)->TMDIFRAME:COMMAND(255)->TMDIFRAME:HANDLEEVENT(0)->_FWH(3345)->WINRUN(0)->TMDIFRAME:ACTIVATE(1050)->TAPPLICATION:SHOWWINDOW(529)->MAIN(83)
   
17/03/2015 17:20:39: G:\DESARROLLO\Fuentes\xharbour\Vehiculos\BIN\carros.Exe -- ====================================================================================================   
 


Saludos
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: TExplorerBar Bitmaps

Postby nageswaragunupudi » Wed Mar 18, 2015 6:43 am

TExplorerbar class correctly destroys the bitmaps it loads.
Please check your class catalogo for any problems. You appear to be creating new bitmap handles in the method LoadWindow() which you need to destroy yourself
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10248
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: TExplorerBar Bitmaps

Postby Francisco Horta » Wed Mar 18, 2015 4:00 pm

Rao,

He revisado la clase como me comentas y no encuentro donde pueda estar creando nuevamente el handle, adjunto el codigo
Code: Select all  Expand view

**********************
METHOD New( pcCatalogo ) CLASS TCatalogo
**********************
LOCAL oSelf := SELF, oError :=  nil, lContinua := .F.

   DEFINE FONT ::oFont NAME "Tahoma" SIZE 0, -12

   DO CASE
      CASE LOWER(pcCatalogo) == "usuarios"
         ::cTabla      := oApp:cTabla + "usuarios"
         ::cQuery      := "SELECT * FROM " + ::cTabla
         ::cWhere      := " WHERE "
         ::cOrder      := " ORDER BY "
         ::cTitle      := "Catálogo de Usuarios"
         ::aHeaders    := { "Codigo", "Nombre", "Id Nomina", "Iniciales", "Alta", "Nivel" }
         ::aFields     := { "id", "nombre", "idnomina", "iniciales", "fechaalta", "nivelacceso" }
         ::aFieldsCond := { , , , , , { "IF", "A", "Administrador", "Usuario" } }
         ::aPictures   := { "9999", "@k!", "99999999", "99/99/9999" }
         ::aDatas      := { { AL_CENTER, AL_RIGHT,  060 },;
                            { AL_CENTER, AL_LEFT,   350 },;
                            { AL_CENTER, AL_RIGHT,  065 },;
                            { AL_CENTER, AL_LEFT,   070 },;
                            { AL_CENTER, AL_CENTER, 095 },;
                            { AL_CENTER, AL_CENTER, 105 } }
         ::aBuscar     := { "Codigo", "Nombre", "Id Nomina" }
         ::aOrden      := { "id", "nombre", "idnomina", "fechaalta" }
         ::aClickH     := { {.t.,1}, {.t.,2}, {.t.,3}, {.f.,0}, {.t.,4}, {.f.,0} }
         ::nExBarH     := 220
         ::aTabs       := { "Codigo", "Nombre", "Id Nomina", "Fecha Alta" }
         ::aLinks      := { { " Nuevo",    { |o| ::Usuarios(o) },    "wnuevo",    1,  "A" },;
                            { " Editar",   { |o| ::Usuarios(o) },    "wedita",    1,  "M" },;
                            { " Eliminar", { |o| ::Usuarios(o) },    "welimina",  1,  "E" },;
                            { " Imprimir", { ||  ::oBrw:Report()},   "wprinter",  1,  "I" },;
                            { " Excel",    { ||  ::oBrw:ToExcel() }, "wexcel",    1,  "X" },;
                            { " Buscar",   { ||  ::BuildBuscar()},   "wbuscar",   1,  "B" },;
                            { " Establecer Permisos", ,              "wpermisos", 1,  "P" },;
                            { " Cerrar Catalogo", { || ::oWndChild:End() }, "wsalir", 2 } }
         ::aPanel      := { { " Elegir Opción", oApp:cDirBmps + "agencias32.png", 120 },;
                            { " Salir", , 30 } }
         ::LoadWindow( oApp:cTabla + "usuarios" )
      CASE LOWER(pcCatalogo) == "plazas"
         ::cTitle := "Catálogo de Plazas"
         ::LoadWindow( oApp:cTabla + "plazas" )
     OTHERWISE
         ALERT("En Construcción ..",{"Ok"},"Aviso",,"Construccion")
         lContinua := .F.
   ENDCASE

RETURN( SELF )


**********************
METHOD LoadWindow( pcTabla ) CLASS TCatalogo
**********************
LOCAL oSelf := SELF, oSpl, oExBar, oTabs, oStatusBar, aoCols[LEN(::aFields)]
LOCAL oPanel := ARRAY(LEN(::aPanel))
LOCAL nPanel := LEN( ::aPanel ), nLinks := LEN( ::aLinks ), nFields := LEN( ::aFields )
LOCAL x, y

   ::nPosicion := 2

   ::oQry := oApp:oServer:Query( ::cQuery + ::cOrder + "nombre" )

   DEFINE WINDOW ::oWndChild MDICHILD OF oApp:oWnd

      ::oWndChild:SetText( ::cTitle )

      oExBar := TExplorerBar():New( 0, 0, ::nExBarH, nil, ::oWndChild )

      FOR x := 1 TO nPanel
         oPanel[x] := oExBar:AddPanel( ::aPanel[x,1], ::aPanel[x,2], ::aPanel[x,3] )
         oPanel[x]:lSpecial = if( x == 1, .T., .F. )
         FOR y := 1 TO nLinks
            IF ::aLinks[y,4] == x
               oPanel[x]:AddLink( ::aLinks[y,1], ::aLinks[y,2], ::aLinks[y,3] )
            ENDIF
         NEXT
      NEXT

      oExBar:nBottomColor := nRGB( 214, 223, 247 )
      oExBar:nTopColor    := nRGB( 244, 253, 255 )


      @ 0,0 XBROWSE ::oBrw OF ::oWndChild

      ::oBrw:SetMySQL( ::oQry, .F. )
      ::oBrw:lHScroll            := .F.
      ::oBrw:nMarqueeStyle       := MARQSTYLE_HIGHLROW
      ::oBrw:nColDividerStyle    := LINESTYLE_LIGHTGRAY
      ::oBrw:nRowDividerStyle    := LINESTYLE_LIGHTGRAY
      ::oBrw:lColDividerComplete := .T.
      ::oBrw:nHeaderHeight       := 28
      ::oBrw:nRowHeight          := 20
      ::oBrw:lAllowColHiding     := .F.
      ::oBrw:lAllowRowSizing     := .F.
      ::oBrw:lAllowColSwapping   := .F.
//      ::oBrw:nStretchCol         := STRETCHCOL_LAST
      ::oBrw:nRecSelColor        := nRGB( 240, 240, 240 )
      ::oBrw:bClrStd             := { || if( ::oQry:RecNo()%2 == 0, { CLR_BLACK, CLR_WHITE }, { CLR_BLACK, nRGB( 218, 250, 216 ) } ) }
      ::oBrw:bClrSelFocus        := { || { CLR_WHITE, nRGB(0,128,192) } }
      ::oBrw:bClrHeader          := { || { nRGB(0,0,0), nRGB( 240, 240, 240 ) } }
      ::oBrw:bClrGrad            := { | lInvert | if( !lInvert,;
                                           ( { { 0.80, nRGB( 240, 240, 240 ), nRGB( 215, 215, 215 ) }, ;
                                               { 0.20, nRGB( 211, 211, 209 ), nRGB( 240, 240, 240 ) } } ),;
                                           ( { { 0.80, nRGB( 250, 245, 230 ), nRGB( 240, 230, 190 ) }, ;
                                               { 0.20, nRGB( 235, 225, 185 ), nRGB( 250, 245, 230 ) } } ) ) }
      ::oBrw:bLDblClick          := { || ::cAccion := "M", Eval( ::aLinks[2,2] ) }

      FOR x := 1 TO nFields
         aoCols[x] := ::oBrw:AddCol()
         aoCols[x]:cHeader       := ::aHeaders[x]
         aoCols[x]:nHeadStrAlign := ::aDatas[x,1]
         aocols[x]:nDataStrAlign := ::aDatas[x,2]
         aoCols[x]:nWidth        := ::aDatas[x,3]
         IF ::aClickH[x,1]
            aoCols[x]:bLClickHeader := {|a,b,c,d| ::Orden(a,b,c,d,oTabs) }
         ENDIF
      NEXT

      AEval( ::oBrw:aCols, { |o| o:lAllowSizing := .f. } )

      ::oBrw:CreateFromCode()

      FOR x := 1 TO nFields
         ::DataGrid( x )
      NEXT

      @ 0, 222 TABS oTabs OF ::oWndChild ;
             ACTION oSelf:Orden( oTabs:nOption ) PIXEL

      oTabs:aPrompts := {}
      oTabs:SetTabs( ::aTabs, 2 )

      ::oWndChild:oBottom = oTabs

      ::oWndChild:oLeft := oExBar

      ::oWndChild:SetControl( ::oBrw )

   ACTIVATE WINDOW ::oWndChild ;
      ON PAINT ( oTabs:nLeft := ::oBrw:nLeft,;
                 oTabs:Refresh(.t.) ) ;
      VALID ( ::oQry:End(), ::oFont:End(), .T. )

RETURN( SELF )
 


adjunto imagen
Image

Otro punto, la texplorerbar no pinta el espacio que deja la ttabs al recorrerla, como puedo hacer que la texplorer ocupe todo el pintado hasta el final de la ventana.

Gracias
Saludos
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: TExplorerBar Bitmaps

Postby Antonio Linares » Wed Mar 18, 2015 4:38 pm

Paco,

Otro punto, la texplorerbar no pinta el espacio que deja la ttabs al recorrerla, como puedo hacer que la texplorer ocupe todo el pintado hasta el final de la ventana.


No entiendo a que te refieres con "el espacio que deja la ttabs al recorrerla", puedes mostrar una imagen ? gracias
regards, saludos

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

Re: TExplorerBar Bitmaps

Postby Antonio Linares » Wed Mar 18, 2015 4:43 pm

Prueba asi:

Code: Select all  Expand view
  ACTIVATE WINDOW ::oWndChild ;
      ON RESIZE ( oTabs:nLeft := ::oBrw:nLeft ) ;
      VALID ( ::oQry:End(), ::oFont:End(), .T. )
regards, saludos

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

Re: TExplorerBar Bitmaps

Postby Antonio Linares » Wed Mar 18, 2015 4:44 pm

Son 8 bitmaps los que te aparecen y son 8 bitmaps los de la ExplorerBar,

Serán esos posiblemente. Como los añades a la ExplorerBar ?
regards, saludos

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

Re: TExplorerBar Bitmaps

Postby Antonio Linares » Wed Mar 18, 2015 4:47 pm

No veo en tu código donde cargas los bitmaps
regards, saludos

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

Re: TExplorerBar Bitmaps

Postby Francisco Horta » Wed Mar 18, 2015 5:11 pm

Antonio,

Efectivamente son 8 los bitmaps y los bitmaps los traigo en esta data
::aLinks := { { " Nuevo", { |o| ::Usuarios(o) }, "wnuevo", 1, "A" },;
{ " Editar", { |o| ::Usuarios(o) }, "wedita", 1, "M" },;
{ " Eliminar", { |o| ::Usuarios(o) }, "welimina", 1, "E" },;
{ " Imprimir", { || ::oBrw:Report()}, "wprinter", 1, "I" },;
{ " Excel", { || ::oBrw:ToExcel() }, "wexcel", 1, "X" },;
{ " Buscar", { || ::BuildBuscar()}, "wbuscar", 1, "B" },;
{ " Establecer Permisos", , "wpermisos", 1, "P" },;
{ " Cerrar Catalogo", { || ::oWndChild:End() }, "wsalir", 2 } }

y los construyo aqui
oExBar := TExplorerBar():New( 0, 0, ::nExBarH, nil, ::oWndChild )

FOR x := 1 TO nPanel
oPanel[x] := oExBar:AddPanel( ::aPanel[x,1], ::aPanel[x,2], ::aPanel[x,3] )
oPanel[x]:lSpecial = if( x == 1, .T., .F. )
FOR y := 1 TO nLinks
IF ::aLinks[y,4] == x
oPanel[x]:AddLink( ::aLinks[y,1], ::aLinks[y,2], ::aLinks[y,3] )
ENDIF
NEXT
NEXT


probe con el ON RESIZE ( oTabs:nLeft := ::oBrw:nLeft ) y no me dibuja la explorer hasta abajo, sigue dejando el eapcio pintado en gris.

Gracias
Saludos
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: TExplorerBar Bitmaps

Postby Antonio Linares » Wed Mar 18, 2015 8:01 pm

Paco,

Prueba a añadir este método a la Clase TExplorerBar:

METHOD Destroy() INLINE ::Super:Destroy(), AEval( ::aPanels, { | oPanel | oPanel:End() } )

Ese método falta y me da que de ahí viene el problema

Si no mueves los tabs, el pintado se hace bien ?
regards, saludos

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

Re: TExplorerBar Bitmaps

Postby Francisco Horta » Thu Mar 19, 2015 4:21 pm

Antonio,

Agregue a la clase TExplorerBar le metodo destroy, agregue a mi proyecto el .prg de la texplorerbar, vuelvo a ejecuyar mi programa y sigue sin destruir los bmp :(
asi probe con el codigo

ACTIVATE WINDOW ::oWndChild ;
VALID ( oExBar:Destroy(), ::oQry:End(), ::oFont:End(), .T. )


por otra parte quite el mover la ttab y esta se pinta bien desde el lado izquierdo de la ventana, mi intencion es que este debajo del xbrowse, y al moverla el pintado de la explorerbar no es completo, adjunto las 2 imagenes :(

Image
y al recorrerla
Image

Saludos
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: TExplorerBar Bitmaps

Postby Antonio Linares » Thu Mar 19, 2015 7:15 pm

El método Destroy() de TTaskPanel no está siendo llamado y aún no encuentro la causa...
regards, saludos

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

Re: TExplorerBar Bitmaps

Postby Antonio Linares » Thu Mar 19, 2015 7:20 pm

Se os ocurre a alguno por que no se esté llamando al método Destroy() automaticamente ???
regards, saludos

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

Re: TExplorerBar Bitmaps

Postby cnavarro » Thu Mar 19, 2015 8:28 pm

Lo que creo que puede ocurrir es que el metodo Destroy de TaskPnel no destruye los Bitmaps, si probamos el ejemplo Explbar.prg de samples y comprobamos el fichero Checkres.txt aparecen los bmps
Last edited by cnavarro on Thu Mar 19, 2015 8:35 pm, edited 1 time in total.
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: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: TExplorerBar Bitmaps

Postby Antonio Linares » Thu Mar 19, 2015 8:34 pm

Cristobal,

Estoy viéndolo con Daniel porque realmente no entiendo por que no se está llamando el método Destroy() de TTaskPanel

Debería llamarse automaticamente por el simple hecho de declararlo. Asi lo usamos en todas las demas Clases.

Se te ocurre algo ? :-)
regards, saludos

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

Re: TExplorerBar Bitmaps

Postby cnavarro » Thu Mar 19, 2015 8:39 pm

Yo le he probado y creo que si entra en el metodo Destroy automaticamente

Code: Select all  Expand view

METHOD Destroy() CLASS TExplorerBar
Local x
? 1
   AEval( ::aPanels,;
          { | oItem | oItem:End() } )

Return ::Super:Destroy()

 
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: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 84 guests