Página 1 de 1

Editando un browse

Publicado: Mié Ago 31, 2005 2:36 am
por fredy[1]
Hola,
Tengo un problemilla al hacer la edición dentro de un browse. Veréis:
- Pulso <insert> para añadir un dato y lo hace bien.
- Al terminar la lí­nea, continúa en modo inserción con una nueva lí­nea
- Esta segunda lí­nea se posiciona en la primera columna, pero no se ve el cursor
- Escribo un dato en la columna, pulso <enter> y en lugar de saltar a la columna 2, crea un nuevo registro y se pone el la Columna 1
- A partir de ese momento, cada vez que pulso <enter> me salta de lí­nea en lugar de saltar de columna
- Si la columna tiene un botón o un combo, al pasar el cursor por encima, éste desaparece (creo que esto ya lo comento alguien)
Fijaros en la imagen que adjunto. He pulsado insertar para crear el primer registro, y a partir de ahí­, solo he pulsado <enter>. Podéis fijaros que en la segunda lí­nea al pulsar <enter> después del "Explotación" en lugar de ir a "Procedencia" me ha creado una lí­nea nueva.
¡Ah!, si en lugar de <enter> uso <Tab> funciona bien. (Tengo puesto el Application:lUseReturn := .t.)
A una mala ¿Se podí­a anular la tecla <enter>?
Otra cosica,
¿En el OnkeyDown, puedo cazar la combinación de teclas <ctrl>+<Supr>?
En el OnKeyDown del browse tengo algo así­:
IF nKey = 45
::BtnInsertClick()
ENDIF
En el BtnInsert:
::oDbf:AddNew()
::oDbf:Update() //sin esto, en lugar del último me edita el que estoy posicionado
::oBrowse:Edit()
En el PostEdit del Browse (no de cada columna)
IF Empty( ::oDbf:Codigo)
::oDbf:Delete()
IF lCanceled
::lEstoyInsertando := .f.
ELSEIF ::lEstoyInsertando
::BtnInsertClick()
ENDIF
Un saludico,
Fredy
--

Attached files

Editando un browse

Publicado: Mié Ago 31, 2005 9:54 am
por ignacio
Fredy,
Por favor mandanos un pequeño ejemplo que reproduzca el problema. O modifica
el ejemplo DbfBuilder para reproducirlo.
Seguramente estes haciendo mal la insercción de la nueva linea.
Un saludo,
"Fredy" <fredy@airtel.net> escribió en el mensaje
news:[email=a20b86f71bd8c77bebfae5feeb@news.xailer.com...]a20b86f71bd8c77bebfae5feeb@news.xailer.com...[/email]
Hola,
Tengo un problemilla al hacer la edición dentro de un browse. Veréis:
- Pulso <insert> para añadir un dato y lo hace bien.
- Al terminar la línea, continúa en modo inserción con una nueva línea
- Esta segunda línea se posiciona en la primera columna, pero no se ve el
cursor
- Escribo un dato en la columna, pulso <enter> y en lugar de saltar a la
columna 2, crea un nuevo registro y se pone el la Columna 1
- A partir de ese momento, cada vez que pulso <enter> me salta de línea en
lugar de saltar de columna
- Si la columna tiene un botón o un combo, al pasar el cursor por encima,
éste desaparece (creo que esto ya lo comento alguien)
Fijaros en la imagen que adjunto. He pulsado insertar para crear el primer
registro, y a partir de ahí, solo he pulsado <enter>. Podéis fijaros que en
la segunda línea al pulsar <enter> después del "Explotación" en lugar de ir
a "Procedencia" me ha creado una línea nueva.
¡Ah!, si en lugar de <enter> uso <Tab> funciona bien. (Tengo puesto el
Application:lUseReturn := .t.)
A una mala ¿Se podía anular la tecla <enter>?
Otra cosica,
¿En el OnkeyDown, puedo cazar la combinación de teclas <ctrl>+<Supr>?
En el OnKeyDown del browse tengo algo así:
IF nKey = 45
::BtnInsertClick()
ENDIF
En el BtnInsert:
::oDbf:AddNew()
::oDbf:Update() //sin esto, en lugar del último me edita el que estoy
posicionado
::oBrowse:Edit()
En el PostEdit del Browse (no de cada columna)
IF Empty( ::oDbf:Codigo)
::oDbf:Delete()
IF lCanceled
::lEstoyInsertando := .f.
ELSEIF ::lEstoyInsertando
::BtnInsertClick()
ENDIF
Un saludico,
Fredy

Editando un browse

Publicado: Jue Sep 01, 2005 3:21 pm
por fredy[1]
Hola Ignacio,
Mira el ejemplo que te adjunto,
Es una inserción de datos simple a través de un browse. La única condición es que la procedencia sea una provincia de Aragón (Zaragoza, Huesca o Teruel)
Veamos el proceso:
Si inserto una nueva lí­nea, todo va bien. Cuando llego a la casilla "procedencia", si por ejemplo le digo que "Cuenca" me avisa de que no es un dato válido y se me queda a esperar otro.
Los problemas vienen cuando:
1- Si estoy en la "procedencia" le pongo "cuenca" y pulso <escape> el mensaje de alerta me lo da dos veces.
Parece claro que el aCols[2]:oGridEdit:OnExit lo evalúa dos veces ¿por qué?
¿Hay alguna forma en este evento de saber si he salido con escape?
2- Inserto una lí­nea, en "procedencia" le pongo "Madrid" y pulso el botón "click"
Esto hace que me salga del browse y por tanto del edit, me evalúa el OnExit, pero no hace caso del lRetorno := .f.. Vale, la edición no es modal y como he abandonado el control, pasa de si el dato es correcto o no.
Lo único que tengo claro a estas alturas es que Madrid no es de Aragón.
¿Cómo hago para que ésto no pase?
Lo ideal serí­a avisar del error y volver a la edición de esa celda, pero eso lo veo dificil, así­ que me conformarí­a con poder avisar y borrar la lí­nea completa, pero no se cómo hacerlo. ¿Cómo hago para borrar la lí­nea?
¿En el PostEdit hay alguna forma de saber cuál es el siguiente control en tomar el foco?
Otra opción serí­a invadir Madrid y que fuerais todos maños, pero ésta no creo que os haga mucha gracia a los madrileños. :)
Un saludico,
Fredy
--

Attached files brw.zip (2.7 KB)Â

Editando un browse

Publicado: Jue Sep 01, 2005 5:22 pm
por jlalin
Fredy,
> Otra opción serí­a invadir Madrid y que fuerais todos maños, pero ésta no creo que os haga mucha gracia a los madrileños. :)
;-)))
Por cierto, he visto la captura de pantalla que has puesto y querí­a
pedirte, si es posible, un poco de información sobre la aplicación en la
que estás trabajando.
Saludos,
José Lalí­n

Editando un browse

Publicado: Jue Sep 01, 2005 5:47 pm
por fredy[1]
Hola,
Es un control de trazabilidad para un cebadero de ternascos.
De Ternasco de Aragón, por supuesto :)
Un saludico,
Fredy

Editando un browse

Publicado: Jue Sep 01, 2005 7:16 pm
por ignacio
Fredy,
>>1- Si estoy en la "procedencia" le pongo "cuenca" y pulso <escape> el
>>mensaje de alerta me lo da dos veces.
>>Parece claro que el aCols[2]:oGridEdit:OnExit lo evalúa dos veces ¿por
>>qué?
Arreglado. Gracias. Lo he modificado para que no se ejecute ningún VALID
cuando se sale con Escape. No obstante cuando se sale con Click si se evalua
una vez. Recuerda que pulsar Click implica salir sin cancelar realmente.
>>2- Inserto una línea, en "procedencia" le pongo "Madrid" y pulso el botón
>>"click"
>>Esto hace que me salga del browse y por tanto del edit, me evalúa el
>>OnExit, pero no hace caso del
>>lRetorno := .f.. Vale, la edición no es modal y como he abandonado el
>>control, pasa de si el dato es
>> correcto o no. Lo único que tengo claro a estas alturas es que Madrid
>> no es de Aragón.
Según lo he dejado se evalua el valid del gridedit (una vez), pero no puedo
hacer mucho más ya que la edición se termina, los gridedits se ocultan y
mantienen su valor y si decides seguir con la edición o alta pues
logicamente se grabará 'Madrid'. Por eso 'odio' la expresión 'Valid' ya que
realmente es un evento OnExit del control que no es exactamente lo mismo que
una validación. No obstante tienes un evento OnPostEdit en la propia columna
que te permite volver a controlar que el dato es correcto y actuar en
consecuencia. De la misma forma en el OnExit puedes saber si sigues en
edición con la propiead oBrowse:lEditMode.
Fijate en el ejemplo DbfBuilder, ahí veras que la finalización de edición se
hace en dos fases, primero se controla cada columna por su OnPostEdit, y
luego se hace el alta o edición en el OnPostEdit del Browse que se evalua
después de todos los OnPostEdit de cada columna.
>>Lo ideal sería avisar del error y volver a la edición de esa celda
Que manía con el modal ;-) Pues va a ser que no, lo siento.
>>¿Cómo hago para borrar la línea?
Supongo que borrando el registro de la DBF y refrescando el Browse.
>>¿En el PostEdit hay alguna forma de saber cuál es el siguiente control en
>>tomar el foco?
oForm:oActiveControl es el control que tiene el foco en cada momento. Si
sales pulsando click con el ratón el foco pasará al control donde hayas
hecho click. Si sales con teclado volverá al control que tenía foco cuando
entrastes en edición. No obstante en la versión que tienes ahora mismo el
foco se pasaba siempre al Browse y ya se ha corregido.
Por cierto, el sistema que utilizas para insertar una nueva linea en el
OnPostEdit no se puede hacer porque no permites que el método PostEdit()
termine con todo lo que tiene que hacer y además produces un apilamiento
excesivo que puede hacer cascar tu aplicación si se hacen muchos inserciones
anidadas. Además en mi opinión sólo deberías hacer una una nueva inserción
si se ha salido de la edición pulsando Intro en el último GridEdit, para
ello he incluido un parametro más en Browse:OnPostEdit y BrwCol:OnPostEdit
que indica la última tecla pulsada. Si su valor es cero significa que se ha
salido haciendo click fuera de la zona de edición.
Para evitar llamar a Insertar() dentro de OnPostEdit simplemente cambialo
por:
::PostMsg( WM_XAILER )
Y crea el siguiente método:
METHOD WMXailer() INLINE ::DBBrowse1PastEof()
Además en la futura versión ya no se permite volver a entrar en edición si
existe una post edición en marcha.
Un saludo,
"Fredy" <fredy@airtel.net> escribió en el mensaje
news:[email=a20b86f75d08c77d1ff5317e66@news.xailer.com...]a20b86f75d08c77d1ff5317e66@news.xailer.com...[/email]
Hola Ignacio,
Mira el ejemplo que te adjunto,
Es una inserción de datos simple a través de un browse. La única condición
es que la procedencia sea una provincia de Aragón (Zaragoza, Huesca o
Teruel)
Veamos el proceso:
Si inserto una nueva línea, todo va bien. Cuando llego a la casilla
"procedencia", si por ejemplo le digo que "Cuenca" me avisa de que no es un
dato válido y se me queda a esperar otro.
Los problemas vienen cuando:
1- Si estoy en la "procedencia" le pongo "cuenca" y pulso <escape> el
mensaje de alerta me lo da dos veces.
Parece claro que el aCols[2]:oGridEdit:OnExit lo evalúa dos veces ¿por qué?
¿Hay alguna forma en este evento de saber si he salido con escape?
2- Inserto una línea, en "procedencia" le pongo "Madrid" y pulso el botón
"click"
Esto hace que me salga del browse y por tanto del edit, me evalúa el OnExit,
pero no hace caso del lRetorno := .f.. Vale, la edición no es modal y como
he abandonado el control, pasa de si el dato es correcto o no.
Lo único que tengo claro a estas alturas es que Madrid no es de Aragón.
¿Cómo hago para que ésto no pase?
Lo ideal sería avisar del error y volver a la edición de esa celda, pero eso
lo veo dificil, así que me conformaría con poder avisar y borrar la línea
completa, pero no se cómo hacerlo. ¿Cómo hago para borrar la línea?
¿En el PostEdit hay alguna forma de saber cuál es el siguiente control en
tomar el foco?
Otra opción sería invadir Madrid y que fuerais todos maños, pero ésta no
creo que os haga mucha gracia a los madrileños. :)
Un saludico,
Fredy

Editando un browse

Publicado: Jue Sep 01, 2005 10:51 pm
por jlalin
Fredy,
> Es un control de trazabilidad para un cebadero de ternascos. De Ternasco
> de Aragón, por supuesto :)
Muchas gracias. Al ver la captura pensé que se trataba de un control de
saneamientos para explotaciones ovinas/bovinas.
Saludos,
José Lalí­n