Problemas con Xbrowse al editar campos de una DBF

Problemas con Xbrowse al editar campos de una DBF

Postby VPOZO » Mon Sep 21, 2009 1:27 pm

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 los campos 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 los campos 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[i]:cHeader := aTcamp[i]
aCol[i]:bStrData := GenFieldBlock( cAlias, aNcamp[i])
aCol[i]:nWidth := aSixe[i]
aCol[i]:cEditPicture := aPict[i]
If aAlin[i]="R"
aCol[i]: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
User avatar
VPOZO
 
Posts: 32
Joined: Tue Jun 24, 2008 5:19 pm
Location: Punta Arenas, Chile

Re: Problemas con Xbrowse al editar campos de una DBF

Postby VPOZO » Mon Sep 21, 2009 9:37 pm

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:
User avatar
VPOZO
 
Posts: 32
Joined: Tue Jun 24, 2008 5:19 pm
Location: Punta Arenas, Chile


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 42 guests