Page 1 of 1

Mal funcionamiento listbox con vector

Posted: Wed Apr 02, 2008 2:26 pm
by Jorge Jaurena
Hola.
Tengo el siguiente problema:
Creo un listbox usando un vector con cuatro elementos, cuando lo inicializo para que quede parado en el ultimo elemento y quiero usar la flecha del teclado para subir y seleccionar otro elemento no responde, note que si presiono la tecla end me refresca la pantalla y me permite seleccionar otro, no pasa esto cuando arranca en el primer elemento.
De esta manera lo creo:

Local VecComp:={"TICKET","FACTURA","CREDITO","REMITO"}

nItem1:=4

REDEFINE LISTBOX oLbxT;
FIELDS VecComp[nItem1],"";
HEAD "Tipo de comprobante","";
SIZES 250,1;
ID 1000 OF oDlg1;
ON DBLCLICK ModComp(nItem1,oLbx,Btn1,oDlg1,@CodC,ImpFisc,TipFiscal,ObsFacSiNo);
FONT oFontP

oLbxT:nClrBackFocus:=Amarillo
oLbxT:nClrForeFocus:=Negro
oLbxT:bKeyDown :={|nkey,nFlag| IF(nKey=13, ModComp(nItem1,oLbx,Btn1,oDlg1,@CodC,ImpFisc,TipFiscal,ObsFacSiNo), )}
oLbxT:bGoTop :={ || nItem1 := 1 }
oLbxT:bGoBottom :={ || nItem1 := Eval( oLbxT:bLogicLen ) }
oLbxT:bSkip :={ | nWant, nOld | nOld := nItem1, nItem1 += nWant,;
nItem1 := Max( 1, Min( nItem1, Eval( oLbxT:bLogicLen ) ) ),;
nItem1 - nOld }
oLbxT:bLogicLen :={ || Len( VecComp ) }
oLbxT:aJustify :={.t.,.f.}

Gracias
Jorge Jaurena

Posted: Wed Apr 02, 2008 6:20 pm
by ADBLANCO
Prueba con:

oLbxT:SetArray( VecComp )

Posted: Wed Apr 02, 2008 6:25 pm
by ADBLANCO
Y le quitas:

oLbxT:bGoTop :={ || nItem1 := 1 }
oLbxT:bGoBottom :={ || nItem1 := Eval( oLbxT:bLogicLen ) }
oLbxT:bSkip :={ | nWant, nOld | nOld := nItem1, nItem1 += nWant,;
nItem1 := Max( 1, Min( nItem1, Eval( oLbxT:bLogicLen ) ) ),;
nItem1 - nOld }
oLbxT:bLogicLen :={ || Len( VecComp ) }

Posted: Thu Apr 03, 2008 11:45 am
by Jorge Jaurena
Hola Angel, probe el metodo que me sugeriste pero no funciona, solo se limita a repetir el texto del elemento con el cual lo inicializo, por ej. me pone REMITO en los cuatro elementos.
Lo raro es que esta misma clase (TWBrowse) funciona bien con las dbf, pero comete este error con los vectores.

Saludos
Jorge Jaurena

Posted: Thu Apr 03, 2008 12:42 pm
by ADBLANCO
Esto me trabaja perfecto aquí:

Local VecComp:={"TICKET","FACTURA","CREDITO","REMITO"}

REDEFINE LISTBOX oLbxT;
FIELDS VecComp[oLbxT:nAt];
HEAD "Tipo de comprobante";
SIZES 250;
ID 1000 OF oDlg1

oLbxT:SetArray( VecComp )

Posted: Thu Apr 03, 2008 12:54 pm
by ADBLANCO
Claro! te repite el cuarto elemento porque es lo que le estás ordenando, debes utilizar:

VecComp[oLbxT:nAt]

y si quieres que comienze en el cuarto elemento debes hacer:

oLbxT:nAt:=4