Page 1 of 1

DelItem en TFolderEx (Solucionado)

Posted: Wed May 29, 2013 5:39 pm
by cnavarro
Buenas tardes
Al suprimir las Tabs de un FolderEx y llegar al ultimo elemento me da el siguiente error:
Aclarar que antes de suprimir añado un item (AddItem)
He mirado la clase que tengo y la linea en la que aparece el error es:

Code: Select all

METHOD PaintTB() CLASS TFolderEx
   LOCAL aRect   := GetClientRect( ::hWnd )
   LOCAL n, j
   LOCAL nLen    := Len( ::aPrompts )
   LOCAL hBmpPaint
   LOCAL nLastRow
Linea 1358   LOCAL hBrush, hDlgBrush := ::aDialogs[ ::nOption ]:oBrush:hBrush//CreateSolidBrush( CLR_WHITE )//   
 

Code: Select all

   Compiler version: Harbour 3.2.0dev (Rev. 17516)
   FiveWin  Version: FWH 12.02
   Windows version: 6.2, Build 9200 

   Time from start: 0 hours 0 mins 35 secs 
   Error occurred at: 29/05/2013, 19:23:00
   Error description: Error BASE/1132  Bound error: array access
   Args:
     [   1] = A   { ... }
     [   2] = N   2

Stack Calls
===========
   Called from: .\source\classes\TFOLDEX.PRG => TFOLDEREX:PAINTTB( 1358 )
   Called from: .\source\classes\TFOLDEX.PRG => TFOLDEREX:PAINT( 1130 )
   Called from: .\source\classes\TFOLDEX.PRG => (b)TFOLDEREX( 117 )
   Called from: .\source\classes\TFOLDEX.PRG => TFOLDEREX:DISPLAY( 0 )
   Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1666 )
   Called from: .\source\classes\TFOLDEX.PRG => TFOLDEREX:HANDLEEVENT( 925 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3159 )
   Called from:  => DIALOGBOXINDIRECT( 0 )
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 270 )
   Called from: .\source\function\ERRSYSW.PRG => ERRORDIALOG( 426 )
   Called from: .\source\function\ERRSYSW.PRG => (b)ERRORSYS( 31 )
   Called from: .\source\classes\TFOLDEX.PRG => TFOLDEREX:CHANGEORDER( 651 )
   Called from: .\source\classes\TFOLDEX.PRG => TFOLDEREX:RESIZE( 1550 )
   Called from: .\source\classes\TFOLDEX.PRG => TFOLDEREX:DEFAULT( 791 )
   Called from: .\source\classes\TFOLDEX.PRG => TFOLDEREX:DELITEM( 725 )
   Called from: vmh.prg => CIERRA( 1946 )
   Called from: vmh.prg => (b)BARFLDS( 1917 )
   Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:CLICK( 465 )
   Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:LBUTTONUP( 656 )
   Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1690 )
   Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:HANDLEEVENT( 1407 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3159 )
   Called from:  => WINRUN( 0 )
   Called from: .\source\classes\WINDOW.PRG => TMDIFRAME:ACTIVATE( 980 )
   Called from: vmh.prg => MAIN( 774 )
 
La funcion en la que se produce el error

Code: Select all

Function Cierra()
Local nOpt     := oFldUtiles:nOption    //aDialogs[ 7 ]
Local nLenD    := Len( oFldUtiles:aDialogs )
Local nPosD    := 0

   if nLenD = 1
      oFldUtiles:AddItem( "NONE", , , )
      oFldUtiles:SetOption( 2 )      
      nPosD   := 1
      
   else
      if nLenD = 2
         nPosD := 1
      else
         nPosD := nOpt - 1
      endif
   endif
   //if nLenD > 1
   ? Len( oFldUtiles:aDialogs ), nOpt
   oFldUtiles:DelItem( nOpt )                   // Linea 1946

.../...
 
Y los valores:

Len( oFldUtiles:aDialogs ) -> 2 (Ya que he añadido antes de borrar)
nOpt -> 1 (Posicion actual)

No encuentro el problema
He intentado, asignando Brush a todos los Dialogs que voy creando por si acaso sin ningun resultado
He buscado por el foro y no encuentro ninguna referencia sobre el tema.
Gracias

Re: DelItem en TFolderEx

Posted: Wed May 29, 2013 6:47 pm
by Pedro
Hola
Lo mismo digo una burrada, pero....por qué no eliminas

Code: Select all

   if nLenD = 1
      oFldUtiles:AddItem( "NONE", , , )
      oFldUtiles:SetOption( 2 )     <-----------Esta línea
      nPosD   := 1
lo digo porque estas forzando al Folder a la pestaña 2 y luego eliminas la uno
Linea 1358 LOCAL hBrush, hDlgBrush := ::aDialogs[ ::nOption ]:oBrush:hBrush//CreateSolidBrush( CLR_WHITE )// Lo más probable es que aquí ::nOption sea 2

Re: DelItem en TFolderEx

Posted: Wed May 29, 2013 7:17 pm
by cnavarro
Pedro, muchas gracias

Me has dado el hilo para solucionarlo

Esa linea que comentas no la tenía, pero lo puse en una de las muchas pruebas que hacia
Daba igual que lo pusiera o no, ya que el ADDItem, ya lo hace por defecto, por lo que la circunstancia que comentas, que era efectivamente el problema, seguía apareciendo
Solucion:

Code: Select all

   oFldUtiles:SetOption( 1 )      --> Actualizar la posición en la que voy a borrar
   oFldUtiles:DelItem( nOpt )
 
Hay veces que llevas un monton de horas y no ves lo que es evidente.
Lo suyo es parar y tomar una cerveza. (Otra para ti)

Muchas gracias y un saludo

Re: DelItem en TFolderEx (Solucionado)

Posted: Wed May 29, 2013 7:45 pm
by Pedro
Me la tomo a tu salud