FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour ¿Que pasa en este codigo?
Posts: 189
Joined: Fri Oct 14, 2005 12:33 AM
¿Que pasa en este codigo?
Posted: Mon Jan 05, 2009 11:07 PM
Hola a todos,

:-) Disculpen, pero se vive de las tonterías. No que se le pasa a este codigo, que me da error. El problema viene del LISTBOX, pues cuando lo comento pasa bien:

   DEFINE WINDOW oWndChild MDICHILD OF oWnd1 PIXEL FROM nTop, nLeft TO nBottom, nRight  ;
        TITLE cTitle

     DEFINE BUTTONBAR oBar OF oWndChild

       DEFINE BUTTON OF oBar ACTION MsgInfo( "Action" )
       DEFINE BUTTON OF oBar ACTION oWndChild:End()

         @  1, 1 LISTBOX oLbx FIELDS arr1[oLbx:nAt,1],;
                                     arr1[oLbx:nAt,2] ;
                              HEADERS "Código","Nombre" ;
                              SIZE 200,137 PIXEL OF oWndChild

            oLbx:SetArray( arr1 )

     // oWndChild:bResized := {|| oLst:SetSize( oWndChild:nWidth() - 17, oWndChild:nHeight() - iif(LargeFonts(), 79, 69) ) }

     oWndChild:Center()

   ACTIVATE WINDOW oWndChild  ; // ON INIT (Eval(oWndChild:bResized)) ;
         VALID IF(MsgYesNo( "¿ Confirma cerrar esta ventana ?" ), ;
                      FCierre( SUBSTR(oWndChild:cCaption,10,LEN(oMcf:Estacion)), oWndChild ),)


El error que aparece es un MsgStop con el texto: "Error BASE/1132 Bound error: array access from Errorsys, line: 0", y no puedo ver mas nada !

El arreglo arr1 fue definido con 8 filas por dos columnas, TODOS datos tipo character (texto).

Gracias anticipadas....
Julio Llinás
Visita mi Blog en http://mangucybernetico.blogspot.com/
xHarbour 1.1.0 + FWH810 + Borland 5.5.1
Posts: 389
Joined: Wed Nov 29, 2006 01:51 PM
Re: ¿Que pasa en este codigo?
Posted: Tue Jan 06, 2009 12:16 AM

Juilio,
proba asi :
@ 1, 1 LISTBOX oLbx FIELDS "" ;
OF oChild ;
UPDATE

          oLbx:bLine:= {|nAt| nAt:= oLbx:nAt,                      ;
                        If( Len(aDatos)<1 .or. nAt>Len(aDatos),;
                          Array(2),                            ;
                          { aDatos[nAt,1],            ;
                            aDatos[nAt,2] } ) }

       oLbx:SetArray( aDatos)
       oLbx:aColSizes:= {90, 220 }
       oLbx:aHeaders := { "Codigo", "Nombre" }
       oLbx:aJustify :=  { .t., .f. }
       .... tus definiciones.

Pd. aDatos -> tu array

Salu2, Ariel.

Posts: 189
Joined: Fri Oct 14, 2005 12:33 AM
Re: ¿Que pasa en este codigo?
Posted: Tue Jan 06, 2009 01:31 AM

Amigo, sigue igualito...

Creo que el codigo que me suguieres se presta mas a hacer un debug paso a paso...

Estare posteando como me va.

Gracias adelantadas,

:(

Julio Llinás
Visita mi Blog en http://mangucybernetico.blogspot.com/
xHarbour 1.1.0 + FWH810 + Borland 5.5.1
Posts: 389
Joined: Wed Nov 29, 2006 01:51 PM
Re: ¿Que pasa en este codigo?
Posted: Tue Jan 06, 2009 02:05 AM

Julio,

y si añades : oLbx:bLogicLen := {|| LEN(arr1) }, luego del setarray... a ver q pasa.

Salu2,

Posts: 189
Joined: Fri Oct 14, 2005 12:33 AM
Re: ¿Que pasa en este codigo?
Posted: Tue Jan 06, 2009 02:14 AM

Bueno....

Ya lo heche a andar (mas o menos). Tenia un error en el codigo que me proporcionaste (estaba definiendo a oLbx:ColSizes, en vez de oLbx:aColSizes).

Ahora se muestra todo. Me muestra el wbrose con los datos, pero al final de mostrarlo me da el error de que la variable oLbx no existe.

No entiendo...

Julio Llinás
Visita mi Blog en http://mangucybernetico.blogspot.com/
xHarbour 1.1.0 + FWH810 + Borland 5.5.1
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: ¿Que pasa en este codigo?
Posted: Tue Jan 06, 2009 07:27 AM
Julio,

Cuando estas definiendo el objeto oLbx, no puedes usar el mismo objeto en su propia definicion, pues aun no existe (es nil).

Observa que en tu codigo usas oLbx:nAt cuando oLbx es aun nil !

Aqui tienes un ejemplo completo de como hay que hacerlo:
#include "FiveWin.ch"

function Main()

   local oWnd, oBar, oLbx, arr1 := { { "123", "FiveWin" }, { "456", "FiveTech" } }

   DEFINE WINDOW oWnd TITLE "Test"

   DEFINE BUTTONBAR oBar OF oWnd

   DEFINE BUTTON OF oBar ACTION MsgInfo( "Action" )
   DEFINE BUTTON OF oBar ACTION oWnd:End()

   @  1, 1 LISTBOX oLbx FIELDS "", "" ;
                        HEADERS "Código","Nombre" ;
                        SIZE 200,137 PIXEL OF oWnd

   // Aqui oLbx ya es un objeto browse, y no es nil !
   oLbx:bLine = { || { arr1[oLbx:nAt,1], arr1[oLbx:nAt,2] } } 
   oLbx:SetArray( arr1 )
   oWnd:oClient = oLbx

   oWnd:Center()

   ACTIVATE WINDOW oWnd

return nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 189
Joined: Fri Oct 14, 2005 12:33 AM
Re: ¿Que pasa en este codigo?
Posted: Tue Jan 06, 2009 01:37 PM

Ariel y Antonio,

Gracias, ya lo puse a funcionar. Como muestra Antonio, había que declarar oLbx y arr como variables locales.

Eso era todo. :D
Abrazos y Gracias de nuevo...

Julio Llinás
Visita mi Blog en http://mangucybernetico.blogspot.com/
xHarbour 1.1.0 + FWH810 + Borland 5.5.1

Continue the discussion