FolderEx y DelItem

FolderEx y DelItem

Postby cnavarro » 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: Select all  Expand view

.../...

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

Re: FolderEx y DelItem

Postby Antonio Linares » Wed Feb 18, 2015 8: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42073
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: FolderEx y DelItem

Postby cnavarro » Wed Feb 18, 2015 9: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 :shock: , 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
User avatar
cnavarro
 
Posts: 6541
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: FolderEx y DelItem

Postby Daniel Garcia-Gil » Fri Feb 20, 2015 2:08 pm

Saludos

cambia el metodo DelItem

Code: Select all  Expand view

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
 
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: FolderEx y DelItem

Postby cnavarro » Fri Feb 20, 2015 2: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: Select all  Expand view

.../...

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

Re: FolderEx y DelItem (Solucionado)

Postby Daniel Garcia-Gil » Fri Feb 20, 2015 3: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
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: FolderEx y DelItem (Solucionado)

Postby Biel EA6DD » Fri Feb 20, 2015 4:49 pm

Con permiso, ya que fui yo quien sugirió el cambio, para mi tal cual esta es correcto.
Code: Select all  Expand view
::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  Expand view
::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: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: FolderEx y DelItem (Solucionado)

Postby Biel EA6DD » Fri Feb 20, 2015 4:50 pm

Hemos escrito el mensaje al unísono :lol: :lol:
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: FolderEx y DelItem (Solucionado)

Postby cnavarro » Fri Feb 20, 2015 6: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
User avatar
cnavarro
 
Posts: 6541
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: FolderEx y DelItem (Solucionado)

Postby Daniel Garcia-Gil » Fri Feb 20, 2015 7: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
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: FolderEx y DelItem (Solucionado)

Postby cnavarro » Fri Feb 20, 2015 7: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
User avatar
cnavarro
 
Posts: 6541
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: FolderEx y DelItem (Solucionado)

Postby Biel EA6DD » Mon Feb 23, 2015 8: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: Select all  Expand view

#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
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: FolderEx y DelItem

Postby cnavarro » Mon Feb 23, 2015 3: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: Select all  Expand view

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

Re: FolderEx y DelItem

Postby Biel EA6DD » 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: Select all  Expand view

::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
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: FolderEx y DelItem

Postby cnavarro » 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:
Last edited by cnavarro on Tue Feb 24, 2015 12:56 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: 6541
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 54 guests