Cómo editar celdas en un TxBrowse

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

Cómo editar celdas en un TxBrowse

Post by Rafael Clemente »

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

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
El Loco
Posts: 220
Joined: Fri May 19, 2006 4:08 pm

Re: Cómo editar celdas en un TxBrowse

Post by El Loco »

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

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 =>))
User avatar
Rafael Clemente
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Post by Rafael Clemente »

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

Post by Rafael Clemente »

Sólo como referencia, mi función GrabarUnDato() es muy simple:

Code: Select all

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
un_jeepero
Posts: 31
Joined: Fri Mar 17, 2006 2:04 pm

Post by un_jeepero »

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
User avatar
Rafael Clemente
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Post by Rafael Clemente »

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
un_jeepero
Posts: 31
Joined: Fri Mar 17, 2006 2:04 pm

Post by un_jeepero »

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
User avatar
Rafael Clemente
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Post by Rafael Clemente »

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
Post Reply