array dos dimensiones

array dos dimensiones

Postby rolando » Wed Jan 02, 2008 10:37 pm

Buenas tardes y buen año para todos,

Nunca usé arrays de dos dimensiones y ahora necesito cargar un array con los datos de dos campos de una dbf y luego, hacer un browse con ellos.

Algo hago mal, porque no funciona. Adjunto el código simplificado para ver si alguien puede ayudarme. Obviamente en cAlias está el alias de la dbf en uso. y ya hice el go top.

El code es este´:

local aArray:=array(2)


do while ! eof()
Aadd(aArray , {((cAlias)->MODELO) , ((cAlias)->CHASIS)})
skip
loop
enddo

define dialog oDlg resource 1009 of oWnd
redefine listbox oLbx fields aArray[1], aArray[2] ;
headers "MODELO", "CHASSIS" ;
id 102 of oDlg ;
on dblclick oDlg:end()
oLbx:cTooltip:='Doble click para selectar ítem y salir'

activate dialog oDlg center


Gracias.

Rolando :D
User avatar
rolando
 
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Postby Raymundo Islas M. » Wed Jan 02, 2008 11:04 pm

Code: Select all  Expand view
REDEFINE LISTBOX lbCptAdq ;
   FIELDS aCptAdq[pCA,1],aCptAdq[pCA,2],aCptAdq[pCA,3], ;
   aCptAdq[pCA,4],aCptAdq[pCA,5],aCptAdq[pCA,6]  ;
   HEAD "RENGLON","CLAVE Y DESCRIPCION DE LOS BIENES","CANT","UNIDAD","UNITARIO","IMPORTE" ;
   ID 133 ;
   FONT oFntBrw ;   
   FIELDSIZES 65,595,60,70,90,95 ;
   OF oMainPgs:aDialogs[1]

   lbCptAdq:SetArray( aCptAdq )
   lbCptAdq:nLineStyle := 2
   lbCptAdq:lDrawFocusRect := .F.
   lbCptAdq:nClrLine   := CLR_WHITE
//   lbCptAdq:nClrBackHead := 13425898
   lbCptAdq:BGOTOP     := { || pCA :=1}
     lbCptAdq:BGOBOTTOM  := { || pCA := eVal( lbCptAdq:bLogicLen ) }
     lbCptAdq:BSKIP      := { | nwant, nold | nold := pCA , pCA += nwant, ;
   pCA := Max( 1, Min( pCA, eVal( lbCptAdq:bLogicLen ) ) ), pCA - nOld }
   lbCptAdq:BLOGICLEN  := { || Len( aCptAdq ) }
   lbCptAdq:AJUSTIFY   := { 2,0,1,2,1,1 }
//   lbCptAdq:AJUSTIFY   := { .F.,.F.,.T.,.T.,.T.,.T. }
//   lbCptAdq:bKeyDown   := { | nKey | CAPVTSKEY( nKey ) }
   lbCptAdq:nClrPane   := { || IIF( pCA%2 == 0, ClrBrwsA, ClrBrwsB ) }
//   lbCptAdq:AACTIONS   := { ,,,{|| APLDSCTX(1) },,,{|| APLDSCTX(2) } }
   lbCptAdq:lAdjLastCol:= .F.



Con eso te debe trabajar bien !

Saludos
FWH 10.6 + xHarbour + Borland 582
User avatar
Raymundo Islas M.
 
Posts: 592
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Postby rolando » Thu Jan 03, 2008 11:07 am

Raymundo,

Gracias por tu respuesta.

Estoy viendo el código que publicaste y te consulto, el [pCA,1], [pCA,2], etc, ¿Son para indicar, el "[pCA" la ubicación dentro del array y el ",1]" la dimensión que le corresponde?

Cuando vuelva de mi trabajo, desde donde estoy escribiendo lo pongo en práctica y comento los resultados, pero me interesa saber lo que te consulté antes.

Gracias.

Rolando :D
User avatar
rolando
 
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Postby caducca » Thu Jan 03, 2008 12:38 pm

Hola Rolando:

El problema aparente es en la definicion del ARRAY, ya que si lo defines como ARRAY(2) le estas indicando dos elementos al ARRAY, pero una sola dimencion, para definir dos dimenciones lo debes declarar como ARRAY(1,2), con esto indico que el ARRAY tiene una fila y dos columnas.

Saludos
Carlos A. Ducca
caducca
 
Posts: 104
Joined: Wed Mar 08, 2006 2:24 pm

Postby Willi Quintana » Fri Jan 04, 2008 3:48 am

Pan chancay.... (expresion que significa.... fácil.....)


local aArray:={}

DO WHILE !EOF()
AADD(aArray , {((cAlias)->MODELO) , ((cAlias)->CHASIS)})
DBSKIP()
ENDDO

IF LEN(aArray) = 0 // por si no se lleno el arreglo
AADD(aArray,{"",""})
ENDIF

DEFINE DIALOG oDlg RESOURCE 1009 OF oWnd
REDEFINE LISTBOX oLbx ;
FIELDS aArray[oLbx:nAt, 1], aArray[oLbx:nAt, 2] ;
HEADERS "MODELO", "CHASSIS" ;
ON DBLCLICK oDlg:End() ;
SIZES 100, 100 ;
ID 102 OF oDlg

oLbx:cTooltip:='Doble click para selectar ítem y salir'

ACTIVATE DIALOG oDlg CENTER
....

Salu2
User avatar
Willi Quintana
 
Posts: 1019
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

UPS falto er SetArray

Postby Willi Quintana » Fri Jan 04, 2008 3:56 am

Pan chancay.... (expresion que significa.... fácil.....)


local aArray:={}

DO WHILE !EOF()
AADD(aArray , {((cAlias)->MODELO) , ((cAlias)->CHASIS)})
DBSKIP()
ENDDO

IF LEN(aArray) = 0 // por si no se lleno el arreglo
AADD(aArray,{"",""})
ENDIF

DEFINE DIALOG oDlg RESOURCE 1009 OF oWnd
REDEFINE LISTBOX oLbx ;
FIELDS aArray[oLbx:nAt, 1], aArray[oLbx:nAt, 2] ;
HEADERS "MODELO", "CHASSIS" ;
ON DBLCLICK oDlg:End() ;
SIZES 100, 100 ;
ID 102 OF oDlg

oLbx:SetArray(aArray)
oLbx:cTooltip:='Doble click para selectar ítem y salir'

ACTIVATE DIALOG oDlg CENTER
....
User avatar
Willi Quintana
 
Posts: 1019
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Postby Raymundo Islas M. » Fri Jan 04, 2008 4:22 pm

Asi es Rolando.

Exactamente como lo comentas.


Saludos
FWH 10.6 + xHarbour + Borland 582
User avatar
Raymundo Islas M.
 
Posts: 592
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Postby rolando » Fri Jan 04, 2008 11:47 pm

Muchas gracias a todos Quienes me ayudaron. Problema resuelto.

Saludos.

Rolando :D
User avatar
rolando
 
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 59 guests