by DanielPuente » Sat Feb 18, 2006 1:24 am
servicomver:
La propia clase twbrowse de hernan te permite hacer eso, ya sea sobre matrices o sobre dbfs. Uno de los ejemplos que vienen con la clase (sample01.prg) hace justamente eso sobre matrices. Fijate estos metodos:
oLbx:lAutoEdit := .t.
oLbx:bEdit:= {|nCol, cBuffer, lFirstEdit|;
EditaCelda( oLbx, nCol, cBuffer, aDatos, lFirstEdit, aTotal ) }
Algo similar podes hacer con browses sobre dbfs:
oBcli:lAutoEdit := .t.
oBcli:bKeyChar := {|nK| if( nK==VK_RETURN,oBcli:Edit(oBcli:nColAct,.t.),) }
oBcli:bEdit:= {|nCol, cBuffer, lFirstEdit|;
Edita2Celda( oDlg,oBcli, nCol,cBuffer,lFirstEdit )}
Function Edita2Celda( oFld,oLbx, nCol, cBuffer, lFirstEdit )
LOCAL lContinue:= .t., bValid, nColReal:= nCol
Do Case
Case nCol == 2
cBuffer:=val( left( Personas->C4, 2 )) //C41
bValid:= {|| If( cBuffer < 0 , ;
(MsgStop( "Numero de Nucleos Familiares Incorrecto, ingrese: "+CRLF+CRLF+;
"un valor",oemtoansi("Dato Inv lido") ),.f.), .T. ) }
If lContinue:= oLbx:lEditCol( nColReal, @cBuffer, "@ZE 99", bValid,,CLR_YELLOW )
TrPerson->C4:=PADL(cBuffer,2,'0')
EndIf
Case nCol == 6
cBuffer:=Personas->FECNAC
If lContinue:= oLbx:lEditCol( nColReal, @cBuffer, "@d", bValid,,CLR_YELLOW )
TrPerson->FECNAC:=cBuffer
EndIf
return lContinue
Con la variable lContinue controlas si sigue el ciclo de edicion (para pasar al siguiente registro y continuar agregando uno nuevo o si salis del modo de edicion).
La mayoria de las clases para browses (la tsbrowse de manuel mercado por ejemplo) permiten hacerlo.
Saludos,