FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour FolderEx y DelItem
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
FolderEx y DelItem
Posted: Mon Feb 16, 2015 11:15 AM
Buenos dias
Me ocurre una cosa muy curiosa que he investigado durante unos dias y no he podido descubrir por qué, ya que la misma metodologia e instrucciones con Folder funciona como espero.
Elimino un dialogo con la instrucción oFld:DelItem( nOp ) y, a partir de ahi en el resto de dialogos que quedan a su derecha, puedo acceder a ellos pero no me permite pulsar click sobre el control, aunque si me funciona el mousewheele dentro de él. Los diálogos (pestañas) que quedan a la izquierda del diálogo eliminado siguen funcionando correctamente.

A ver si a algun compañero le ha ocurrido algo similar y me puede orientar por donde puede ir el tema para intentar buscar una solucion porque ya no se qué mirar o comprobar.

Code (fw): Select all Collapse
.../...

      if !Empty( At( "FOLDEREX", oFld:ClassName() ) )
         oFld:DelItem( oFld:nOption ) //nF )
      else
         oFld:DelItemPos( oFld:nOption )
      endif
      aEditors[ nF ] := Nil
      ADel( aEditors, nF )
      ASize( aEditors, Len( aEditors ) - 1 )

      oEditor:End()

.../...


Cada diálogo solo tiene un control "Scintilla"
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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: FolderEx y DelItem
Posted: Wed Feb 18, 2015 08:10 AM

Cristobal,

Y te permite escribir en ellos ?

Prueba a hacer oScintilla:Enable()

Daniel es quien puede ayudarnos aqui, como padre de TFolderEx. Yo lo acabo de mirar pero no le veo nada mal.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: FolderEx y DelItem
Posted: Wed Feb 18, 2015 09:17 AM
Antonio Linares wrote:Cristobal,

Y te permite escribir en ellos ?

Prueba a hacer oScintilla:Enable()

Daniel es quien puede ayudarnos aqui, como padre de TFolderEx. Yo lo acabo de mirar pero no le veo nada mal.


Yo tampoco veo nada mal, y llevo 4 o 5 dias mirandolo
No me deja pinchar en el (el cursor no cambia), pero si me situo encima si me deja actuar con la rueda y los cursores funcionan y tambien me deja escribir
Debo estar ciego :-) , porque no veo el problema
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
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: FolderEx y DelItem
Posted: Fri Feb 20, 2015 02:08 PM
Saludos

cambia el metodo DelItem

Code (fw): Select all Collapse
METHOD DelItem( nOption ) CLASS TFolderEx

   local nLen, oDlg

   DEFAULT nOption := ::nOption

   if Len( ::aPrompts ) > 0
      ::aPrompts = ADel( ::aPrompts, nOption )
      ::aPrompts = ASize( ::aPrompts, Len( ::aPrompts ) - 1 )
      ::CalPos()
      ::aDialogs[ nOption ]:bValid = { || .t. }
      ::aDialogs[ nOption ]:End()
      ::aDialogs = ADel( ::aDialogs, nOption )
      ::aDialogs = ASize( ::aDialogs, Len( ::aDialogs ) - 1 )
      ::aHelps = ADel( ::aHelps, nOption )
      ::aHelps = ASize( ::aHelps, Len( ::aHelps ) - 1 )
      ::aEnable = ADel( ::aEnable, nOption )
      ::aEnable = ASize( ::aEnable, Len( ::aEnable ) - 1 )
      ::aVisible = ADel( ::aVisible, nOption )
      ::aVisible = ASize( ::aVisible, Len( ::aVisible ) - 1 )
      ::aBitmaps = ADel( ::aBitmaps, nOption )
      ::aBitmaps = ASize( ::aBitmaps, Len( ::aBitmaps ) - 1 )

      ::nOption = Min( ::nOption, Len( ::aPrompts ) ) //Biel 1404
      
      ::Default()
   endif

return nil
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: FolderEx y DelItem
Posted: Fri Feb 20, 2015 02:48 PM
Daniel, gracias

Solucionado
En las pruebas que he realizado ahora, funciona correctamente

por otra parte, creo que quizás esa linea debería ser asi:
Code (fw): Select all Collapse
.../...

      ::nOption = Min( nOption, Len( ::aPrompts ) ) //Biel 1404
      
      ::Default()
   endif

return nil


qué opinas?
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
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: FolderEx y DelItem (Solucionado)
Posted: Fri Feb 20, 2015 03:49 PM

Cristóbal

Hablando de memoria y siguiendo el codigo, creo que si lo hacemos como sugieres imagina que estés en el folder 1 y quieres borrar el 3 (de 5 folder total) entonces el folder cambiaría a la posición 3 cuando realmente estas en la 1

Ahora piensa en esta posible utilidad, agregar un codeblok que se ejecute cuando se borre/agregue un ítem bOnItemDeleted / bOnItemAdded

Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: FolderEx y DelItem (Solucionado)
Posted: Fri Feb 20, 2015 04:49 PM
Con permiso, ya que fui yo quien sugirió el cambio, para mi tal cual esta es correcto.
Code (fw): Select all Collapse
::nOption = Min( nOption, Len( ::aPrompts ) )

Si cerramos la pestaña que tiene foco, no tiene incidencia, pero si cerramos una pestaña teniendo el foco en otra, esta implementación forzara el cambio de pestaña.

Tengo 4 pestañas y desde la pestaña 1 (foco actual) cierro la 4, ::nOption pasará a ser 3, cambiando a pestaña 3.

Code (fw): Select all Collapse
::nOption = Min( ::nOption, Len( ::aPrompts ) )

Mismo caso, se eliminará pestaña 4, pero el foco permanecerá en la 1.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: FolderEx y DelItem (Solucionado)
Posted: Fri Feb 20, 2015 04:50 PM

Hemos escrito el mensaje al unísono :lol: :lol:

Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: FolderEx y DelItem (Solucionado)
Posted: Fri Feb 20, 2015 06:51 PM

Daniel, Biel, totalmente de acuerdo
Mi sugerencia era solo con el planteamiento de borrar la pestaña activa
Evidentemente, eso no es siempre asi

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
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: FolderEx y DelItem (Solucionado)
Posted: Fri Feb 20, 2015 07:19 PM
Daniel Garcia-Gil wrote:Cristóbal
Ahora piensa en esta posible utilidad, agregar un codeblok que se ejecute cuando se borre/agregue un ítem bOnItemDeleted / bOnItemAdded
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: FolderEx y DelItem (Solucionado)
Posted: Fri Feb 20, 2015 07:25 PM

Daniel,
Gracias de nuevo, aunque no lo he comentado antes, me he fijado "muy mucho" :D :D :D :shock: en tu comentario al respecto
Precisamente lo estaba mirando.

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
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: FolderEx y DelItem (Solucionado)
Posted: Mon Feb 23, 2015 08:47 AM
Esta modificación del método DelItem, me genera errores.
Adjunto ejemplo, prueba a crear pestañas nuevas con el botón, y después eliminarlas con la x de la pesataña.
Code (fw): Select all Collapse
#include "FiveWin.ch"

STATIC oWnd, oFld
function main()

   DEFINE WINDOW oWnd TITLE "TFolderex - Testing -"
  @ 1, 1 FOLDEREX oFld OF oWnd PIXEL ADJUST ;
          PROMPT "vACIO";
          ACTION( ::DelItem( nOption ) );
          TAB HEIGHT 30 ROUND 3

   ACTIVATE WINDOW oWnd  ON INIT CrtBtn( oFld:aDialogs[1] )

RETURN NIL
//-------------------------------------
STATIC FUNCTION CrtBtn( oDlg )
   @ 01,05 BUTTON oBtn PROMPT "New Tab" OF oDlg  SIZE 64, 20 ACTION NewTab()
RETURN NIL
//------------------------------------
STATIC FUNCTION NewTab()
   LOCAL nFld
   oFld:AddItem( ' New Tab')
   nFld:=Len(oFld:aDialogs)
   oFld:SetBitMap("exit.bmp",nFld)
   oFld:SetBrightBmp( "exit2.bmp", nFld)
   oFld:aAlign[nFld]:=1 //Right
RETURN NIL


Error occurred at: 02/23/15, 09:46:09
Error description: Error BASE/1132 Bound error: array access
Args:
[ 1] = A { ... } length: 1
[ 2] = N 2

Stack Calls
===========
Called from: Source\tfoldex.prg => TFOLDEREX:PAINTTB( 1543 )
Called from: Source\tfoldex.prg => TFOLDEREX:PAINT( 1168 )
Called from: Source\tfoldex.prg => (b)TFOLDEREX( 117 )
Called from: Source\tfoldex.prg => TFOLDEREX:DISPLAY( 0 )
Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1699 )
Called from: Source\tfoldex.prg => TFOLDEREX:HANDLEEVENT( 963 )
Called from: .\source\classes\WINDOW.PRG => _FWH( 3450 )
Called from: => DIALOGBOXINDIRECT( 0 )
Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 286 )
Called from: .\source\function\ERRSYSW.PRG => ERRORDIALOG( 420 )
Called from: .\source\function\ERRSYSW.PRG => (b)ERRORSYS( 23 )
Called from: Source\tfoldex.prg => TFOLDEREX:PAINTTB( 1543 )
Called from: Source\tfoldex.prg => TFOLDEREX:PAINT( 1168 )
Called from: Source\tfoldex.prg => (b)TFOLDEREX( 117 )
Called from: Source\tfoldex.prg => TFOLDEREX:DISPLAY( 0 )
Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1699 )
Called from: Source\tfoldex.prg => TFOLDEREX:HANDLEEVENT( 963 )
Called from: .\source\classes\WINDOW.PRG => _FWH( 3450 )
Called from: => SYSREFRESH( 0 )
Called from: .\source\classes\DIALOG.PRG => TDIALOG:END( 526 )
Called from: Source\tfoldex.prg => TFOLDEREX:DELITEM( 753 )
Called from: Source\Folderex.prg => (b)MAIN( 10 )
Called from: Source\tfoldex.prg => TFOLDEREX:LBUTTONDOWN( 1033 )
Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1720 )
Called from: Source\tfoldex.prg => TFOLDEREX:HANDLEEVENT( 963 )
Called from: .\source\classes\WINDOW.PRG => _FWH( 3450 )
Called from: => WINRUN( 0 )
Called from: .\source\classes\WINDOW.PRG => TWINDOW:ACTIVATE( 1152 )
Called from: Source\Folderex.prg => MAIN( 12 )
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: FolderEx y DelItem
Posted: Mon Feb 23, 2015 03:18 PM
Biel, efectivamente daba error

Asi, lo he probado y funciona bien, aunque aun no he tenido tiempo de ver si se puede optimizar
Code (fw): Select all Collapse
METHOD DelItem( nOption ) CLASS TCFolderEx

   local nLen  := Len( ::aDialogs )
   local oDlg

   DEFAULT nOption := ::nOption

   if Len( ::aPrompts ) > 0
      ::aPrompts = ADel( ::aPrompts, nOption )
      ::aPrompts = ASize( ::aPrompts, Len( ::aPrompts ) - 1 )
      ::aHelps = ADel( ::aHelps, nOption )
      ::aHelps = ASize( ::aHelps, Len( ::aHelps ) - 1 )
      ::aEnable = ADel( ::aEnable, nOption )
      ::aEnable = ASize( ::aEnable, Len( ::aEnable ) - 1 )
      ::aVisible = ADel( ::aVisible, nOption )
      ::aVisible = ASize( ::aVisible, Len( ::aVisible ) - 1 )
      ::aBitmaps = ADel( ::aBitmaps, nOption )
      ::aBitmaps = ASize( ::aBitmaps, Len( ::aBitmaps ) - 1 )

      ::aSizes   = ADel( ::aSizes, nOption )
      ::aSizes   = ASize( ::aSizes, Len( ::aSizes ) - 1 )
      ::aPos     = ADel( ::aPos, nOption )
      ::aPos     = ASize( ::aPos, Len( ::aPos ) - 1 )

      if nOption < nLen
         ::CalPos()
         ::aDialogs[ nOption ]:bValid = { || .t. }
         ::aDialogs[ nOption ]:End()
         ::aDialogs = ADel( ::aDialogs, nOption )
         ::aDialogs = ASize( ::aDialogs, Len( ::aDialogs ) - 1 )
         ::nOption = Min( ::nOption, Len( ::aPrompts ) ) //Biel 1404
      else
         ::nOption = Min( ::nOption, Len( ::aPrompts ) ) //Biel 1404
         ::CalPos()
         ::aDialogs[ nOption ]:bValid = { || .t. }
         ::aDialogs[ nOption ]:End()
         ::aDialogs = ADel( ::aDialogs, nOption )
         ::aDialogs = ASize( ::aDialogs, Len( ::aDialogs ) - 1 )
      endif
      ::Default()
   endif

return nil
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
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: FolderEx y DelItem
Posted: Tue Feb 24, 2015 11:06 AM
Si, así a mi también me funciona bien, gracias Cristobal.
El único pero a esta implementación para mi es el
Code (fw): Select all Collapse
::aDialogs[ nOption ]:bValid = { || .t. }

ya que yo utilizo este codeblock para asignar acciones que se ejecutan al cerrar la pestaña.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: FolderEx y DelItem
Posted: Tue Feb 24, 2015 11:15 AM

Biel, aun no me termina de convencer
Sigo haciendo pruebas.
Lo del bValid, creo que no es imprescindible ponerlo

Estoy buscando la Function CalPos que es llamada desde el metodo del mismo nombre pero no la encuentro :shock:

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