Page 1 of 1

Problemas con Xbrowse al editar campos de una DBF

Posted: Mon Sep 21, 2009 1:27 pm
by VPOZO
Un saludo a los compañeros del Foro, los molesto con una consulta, estoy intentando hacer un dialogo mantenedor de tablas pequeñas del tipo “codigo”, “descripción”, para lo cual pretendo ocupar el xbrowse, lo tengo armado pero me di cuente que cuando edito un camo para modificar sobre la dbf la tecla “VK_BACK” no funciona, no es u problema de a clase GET, si no que de la Clase Txbrowse. En los metodos KeyChar( nKey ) y LDblClick( nRow, nCol, nKeyFlags ), llama a una funcion “oCol:Edit()” que es la que edita el campo, pero no encuentro la fuente como para ver si puedo solucionarlo, intente hacer una funcion propia que edite _ pero desistí ya que los pocesionamientos para dar con las coordenadas de fila y columna me siembre se volvían 0 para filas y 0 para columnas. En todo caso lo unico que me gustaria saber es si tiene solucion lo del “VK_BACK” al editar un campo, el armado del xbrowse lo hago ocupando arreglos para almeacenar _ de la dbf, y es mas o menos esto:

//--> Construye el Browse
DbselectArea(cAlias)
DbSetOrder(nInd)
DbGotop()

//--> Arma el Browse
oBrwEx = TXBrowse():New( oDlgExp )
oBrwEx:nMarqueeStyle := MARQSTYLE_HIGHLROW
oBrwEx:nColDividerStyle := LINESTYLE_BLACK
oBrwEx:nHeaderLines := 1
oBrwEx:lVScroll := .F.
oBrwEx:lHScroll := .F.
oBrwEx:nFreeze := 1
oBrwEx:lFastEdit := .T.
oBrwEx:bSeek := { |c| DbSeek( Upper( c ) ) }
oBrwEx:bChange :={|| ( oGetSeek:VarPut( Padr( oBrwEx:cSeek, 50) ), oGetSeek:Refresh()) }

For i:= 1 To Len(aNcamp)
Aadd( aCol, oBrwEx:AddCol() )
aCol:cHeader := aTcamp
aCol:bStrData := GenFieldBlock( cAlias, aNcamp)
aCol:nWidth := aSixe
aCol:cEditPicture := aPict
If aAlin="R"
aCol:nDataStrAlign := AL_RIGHT
aCol[i]:nHeadStrAlign := AL_RIGHT

ElseIf aAlin[i]="C"
aCol[i]:nDataStrAlign := AL_CENTER
aCol[i]:nHeadStrAlign := AL_CENTER

Endif

//--> Editable
If lAgrega
aCol[i]:nEditType := aStilo[i]
aCol[i]:bOnPostEdit := {|o, v, n| iif( n != VK_ESCAPE, ( FieldPut( o:nCreationOrder, v ), oBrwEx:cSeek:=Alltrim(v) ), ) }


Endif

//--> Pinta la Columna con el Primer Orden
If !Empty(aOrde[i]) .and. i=nInd
aCol[i]:bClrStd := {|| { col_text, col_Bak } }

Endif
//--> Pone los datos para ordenar
If !Empty(aOrde[i])
aCol[i]:AddResource( "BMP_AJUSTE" )
aCol[i]:nHeadBmpNo := Iif( i=nInd, 1, 0)
aCol[i]:nHeadBmpAlign := AL_RIGHT
Endif

Next i

//--> Crea el Brw
oBrwEx:CreateFromResource( 900 )
oBrwEx:SetRDD()

Un gran saludo a Todos.. Gracias

Re: Problemas con Xbrowse al editar campos de una DBF

Posted: Mon Sep 21, 2009 9:37 pm
by VPOZO
Bueno despues de buscar en las clases encontre el metodo que edita las columnas en el xbrowse "ocol:edit()", es un metodo de la clase "TXBrwColumn" por lo menos en la clase que yo tengo copiada en mi equipo, el tema es que este metodo define el siguiente bloque de codigo "::oEditGet:bKeyDown := { |nKey| EditGetkeyDown(Self, nKey) }" que asu ves llama a la funcion EditGetkeyDown(Self, nKey) esta evalua la tecla presionada en el Get del xbrowse pero siempre retorna 0 y lo que hice fue reemplazar esto por el valor nKey Ej:

static function EditGetkeyDown(Self, nKey)

local lExit

lExit := .f.

do case
case nKey == VK_ESCAPE
lExit := .T.

Case nKey == VK_RETURN
If Empty(::cEditPicture) .and. ::oBrw:nDataLines > 1
If !GetKeyState( VK_CONTROL )
lExit := .T.

Endif
Else
lExit := .T.

Endif

Endcase

If lExit
::oEditGet:nLastKey := nKey
::oEditGet:End()

Endif

return 0 //--> esto lo remplace por el nkey

NO SE QUE CONSECUENCIAS ME PUEDE TRAER MODIFICAR ESTE PARAMETRO PERO LO SIGUO VIENDO..

Gracias de todas Formas...!!! :wink: