FolderEx y DelItem

User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

FolderEx y DelItem

Post by cnavarro »

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: Select all

.../...

      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"
Last edited by cnavarro on Mon Feb 23, 2015 3:01 pm, edited 2 times in total.
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: FolderEx y DelItem

Post by Antonio Linares »

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
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: FolderEx y DelItem

Post by cnavarro »

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 :shock: , porque no veo el problema
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: FolderEx y DelItem

Post by Daniel Garcia-Gil »

Saludos

cambia el metodo DelItem

Code: Select all

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
 
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: FolderEx y DelItem

Post by cnavarro »

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: Select all

.../...

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

return nil
 
qué opinas?
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: FolderEx y DelItem (Solucionado)

Post by Daniel Garcia-Gil »

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
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Re: FolderEx y DelItem (Solucionado)

Post by Biel EA6DD »

Con permiso, ya que fui yo quien sugirió el cambio, para mi tal cual esta es correcto.

Code: Select all

::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: Select all

::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/
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Re: FolderEx y DelItem (Solucionado)

Post by Biel EA6DD »

Hemos escrito el mensaje al unísono :lol: :lol:
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: FolderEx y DelItem (Solucionado)

Post by cnavarro »

Daniel, Biel, totalmente de acuerdo
Mi sugerencia era solo con el planteamiento de borrar la pestaña activa
Evidentemente, eso no es siempre asi
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: FolderEx y DelItem (Solucionado)

Post by Daniel Garcia-Gil »

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
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: FolderEx y DelItem (Solucionado)

Post by cnavarro »

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.
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Re: FolderEx y DelItem (Solucionado)

Post by Biel EA6DD »

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: Select all

#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/
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: FolderEx y DelItem

Post by cnavarro »

Biel, efectivamente daba error

Asi, lo he probado y funciona bien, aunque aun no he tenido tiempo de ver si se puede optimizar

Code: Select all

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
 
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Re: FolderEx y DelItem

Post by Biel EA6DD »

Si, así a mi también me funciona bien, gracias Cristobal.
El único pero a esta implementación para mi es el

Code: Select all

::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/
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: FolderEx y DelItem

Post by cnavarro »

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:
Last edited by cnavarro on Tue Feb 24, 2015 12:56 pm, edited 1 time in total.
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Post Reply