Page 1 of 1
Cómo editar celdas en un TxBrowse
Posted: Fri Oct 19, 2007 12:27 pm
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
Re: Cómo editar celdas en un TxBrowse
Posted: Fri Oct 19, 2007 1:34 pm
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 =>))
Posted: Fri Oct 19, 2007 1:45 pm
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
Posted: Fri Oct 19, 2007 1:50 pm
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
Posted: Fri Oct 19, 2007 2:02 pm
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
Posted: Fri Oct 19, 2007 2:27 pm
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
Posted: Fri Oct 19, 2007 2:39 pm
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
Posted: Fri Oct 19, 2007 2:52 pm
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