Cómo editar celdas en un TxBrowse

Cómo editar celdas en un TxBrowse

Postby Rafael Clemente » Fri Oct 19, 2007 12:27 pm

Tengo un TxBrowse con cuatro columnas. Quiero editar las celdas correspondientes a las columnas 2, 3 y 4. Hasta ahora lo hago definiendo
Code: Select all  Expand view
bPostEdit2  := {|o,v,nKey| ::GrabarUnDato(nKey, Val(v) , "CAMPO2")}
bPostEdit3  := {|o,v,nKey| ::GrabarUnDato(nKey, Val(v) , "CAMPO3")}
bPostEdit4  := {|o,v,nKey| ::GrabarUnDato(nKey, Val(v) , "CAMPO4")}

Hasta aquí, todo bien. Un doble click en cualquier celda me permite editarla y grabar su contenido. Ahora bien: Me gustaría que una vez editado el campo 2, al pulsar Intro, entrase automáticamente en modo de edición de la celda siguiente (la 3), sin necesidad de hacer doble click en ella. Alguien me podría dar una solución? Gracias

Rafael
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Re: Cómo editar celdas en un TxBrowse

Postby El Loco » Fri Oct 19, 2007 1:34 pm

Rafael Clemente wrote:Tengo un TxBrowse con cuatro columnas. Quiero editar las celdas correspondientes a las columnas 2, 3 y 4. Hasta ahora lo hago definiendo
Code: Select all  Expand view
bPostEdit2  := {|o,v,nKey| ::GrabarUnDato(nKey, Val(v) , "CAMPO2")}
bPostEdit3  := {|o,v,nKey| ::GrabarUnDato(nKey, Val(v) , "CAMPO3")}
bPostEdit4  := {|o,v,nKey| ::GrabarUnDato(nKey, Val(v) , "CAMPO4")}

Hasta aquí, todo bien. Un doble click en cualquier celda me permite editarla y grabar su contenido. Ahora bien: Me gustaría que una vez editado el campo 2, al pulsar Intro, entrase automáticamente en modo de edición de la celda siguiente (la 3), sin necesidad de hacer doble click en ella. Alguien me podría dar una solución? Gracias

Rafael

Rafa, solo una idea asi al vuelo, en la misma rutina de GrabarUndato() tendrias que ver la posibilidad de pasarle el foco al proximo campo.
Yo no uso la TxBrowse, pero quizas con un :SelectCol( nCol ) podrias hacerlo.
No se solo una idea, habria que ver la rutina GrabarUndato()
Un abrazo. El Loco =>))
El Loco
 
Posts: 328
Joined: Fri May 19, 2006 4:08 pm
Location: Buenos Aires - Argentina

Postby Rafael Clemente » Fri Oct 19, 2007 1:45 pm

Sí; el problema es que no basta con pasar el foco. Para entrar en modo de edición de una celda, el TXBrowse exige un doble click en la celda en cuestión. Yo supongo que habría que hacer un PostMessage() o algo así, pero no sé como. Esa era mi pregunta
Rafael
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby Rafael Clemente » Fri Oct 19, 2007 1:50 pm

Sólo como referencia, mi función GrabarUnDato() es muy simple:
Code: Select all  Expand view
METHOD GrabarUnDato(nKey, v, cFld)
Local cAlias := Alias()
If nKey = VK_RETURN
   (cAlias)->(RLock())
         (cAlias)->(FieldPut((cAlias)->(Fieldpos(cFld)), v))
    (cAlias)->(DbUnLock())
EndIf
Return Nil

Rafael
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby un_jeepero » Fri Oct 19, 2007 2:02 pm

Rafa, yo lo hago utilizando arrays de esta forma:

WITH OBJECT :aCols[ BB_NOMANA ]
:cHeader := "Nombre de Titular "
:nEditType := 1
:bStrData := { |a| a := ::aDetChq[::oBrw:nArrayAt][BB_NOMANA] , IF( Empty( a ), "", Upper(a) ) }
:bOnPostedit := { |o| ::aDetChq[::oBrw:nArrayAt][BB_NOMANA] := Upper( o:oEditGet:cText ) }
:bEditValue := { || ::aDetChq[::oBrw:nArrayAt][BB_NOMANA] }
:nWidth := 140
END

WITH OBJECT :aCols[ BB_GLOMOV ]
:cHeader := "Glosa"
:neditType := 1
:bStrData := { |a| a := ::aDetChq[::oBrw:nArrayAt][BB_GLOMOV] , IF( Empty( a ), "", a ) }
:bOnPostedit := { |o| ::aDetChq[::oBrw:nArrayAt][BB_GLOMOV] := ( o:oEditGet:cText ),;
IF(::oBrw:nArrayAt == Len( ::aDetChq ), AAdd( ::aDetChq, ::AddReg() ), NIL ),;
::oBrw:GoDown(), ::oBrw:GoLeftMost() }
:bEditValue := { || ::aDetChq[::oBrw:nArrayAt][BB_GLOMOV] }
:nWidth := 140
END

Presiono INTRO y el primer objeto pasa a modo edición, luego con INTRO pasa el segundo, luego INTRO y paso a la siguiente linea del browse con modo edición. (::oBrw:GoDown, ::oBrw:GoLeftMost() )

espero te sirva

salu2
Mauro
un_jeepero
 
Posts: 31
Joined: Fri Mar 17, 2006 2:04 pm

Postby Rafael Clemente » Fri Oct 19, 2007 2:27 pm

Mauro:
Sí, tu sistema funciona bien en edición de arrays y en edición de DBFs, si trabajas con MARQSTYLE_CELL; el problema es que yo utilizo MARQSTYLE_HIGHLROW, o sea, ilumino en azul toda la línea, no sólo la celda que tiene el foco. Por eso hay que hacer doble click en el dato que quieres editar. Mi pregunta es si al salir de editar una calda (pulsando Intro) hay forma de simular automáticamente un doble click en la celda siguiente.

De todas formas, muchas gracias. Si no consigo resolverlo de otra forma, tu sistema me da una posible alternativa.
Rafael
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby un_jeepero » Fri Oct 19, 2007 2:39 pm

Rafa,
En el ejmplo que te adjunte MARQSTYLE_HIGHLROW igual funciona al presionar INTRO y pasar a modo edición, el problema es que no sabes la posición del curso, te recomomiendo utilizar:
::oBrw:nMarqueeStyle := 002 // MARQSTYLE_HIGHLROW

salu2

mauro
un_jeepero
 
Posts: 31
Joined: Fri Mar 17, 2006 2:04 pm

Postby Rafael Clemente » Fri Oct 19, 2007 2:52 pm

Mauro:
Sí señor, tienes razón: Con MARQSTYLE_HIGHLROW también funciona. Lo que pasa es que, como tú dices, no ves fácilmente en qué celda estás. Pulsando Intro, confirmo que entras en modo edición. Se trata, pues, de cambiar el foco de la celda a la siguiente y enviar un Intro. Voy a hacer unas pruebas a ver si con este enfoque lo soluciono. Muchas gracias y un saludo,
Rafael
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: cmsoft, gmart1, Google [Bot] and 75 guests