Ignacio,
Gracias, aplicaré esta técnica, pues nada menos es lo que necesito procesar.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <
NoName@xailer.com> escribió en el mensaje
news:45efccba$[email=
1@news.xailer.com...]
1@news.xailer.com...[/email]
> Xevi,
>
> Cuando el browse está en edición, la tecla RETURN la procesa el propio
> Browse para pasarle el foco a la siguiente columna. Por lo tanto, es
> incompatible con el hecho de que al puslar RETURN tu quieras ir a una
> línea más abajo. Lo único que podría hacer es que recibieras también la
> pulsación cuando la edición NO es del tipo MultiEdit, pero no me parece lo
> más adecuado ya que realmente la pulsación de la tecla RETURN lo que hace
> es provocar la salida de la edición, por lo tanto, la tecla se procesa por
> el browse.
>
> Después de ver tus mensajes, creo entender que tu problema radica
> exclusivamente en la captura de la tecla RETURN cuando el Browse se
> encuentra en modo edición. Por favor, confirmamelo. Si es así el Browse te
> ofrece una mejor técnica para actuar en dicho caso y es utilizando el
> propio evento OnPostEdit, pues él te da información de la última tecla
> pulsada, y por lo tanto sólo tendrías que hacer algo como esto:
>
>
> METHOD ArrayBrowse1PostEdit( oSender, lCanceled, nKey ) CLASS TForm1
>
> IF nKey == VK_RETURN
> oSender:PostMsg( WM_KEYDOWN, VK_DOWN )
> ENDIF
>
> RETURN Nil
>
> Observa como utiliza PosMsg() para permitir que todo el proceso de
> grabación termine antes de moverse una línea para abajo.
>
> Saludos,
> --
> Ignacio Ortiz de Zúñiga
>
http://www.xailer.com
>
>
> "Xevi" <
xevicomas@gmail.com> escribió en el mensaje
> news:45ef16ce$[email=
1@news.xailer.com...]
1@news.xailer.com...[/email]
>> Ignacio,
>>
>> Hasta ahora tenía mi Browse que pulsando RETURN cambiaba a la siguiente
>> de la derecha y si pulsaba otra tecla entraba en edición de la celda.
>> Al poner la propiedad AllowEdit a .F. obtengo el efecto de que procese la
>> tecla RETURN y me cambie de columna, pero ahora no puedo entrar en
>> EdiciónAutomática, o sea enviando la tecla pulsada como primer carácter
>> al Edit.
>>
>> METHOD Browse2KeyDown( oSender, nKey, nFlags ) CLASS TFrmORAlbarans
>> ...
>> ElseIf nKey == VK_RETURN
>> ::oBrowse2:GoDown()
>> Else
>> ::oBrowse2:lFastEdit := .T.
>> ...
>>
>> He probado de cambiar ::oBrowse2:lFastEdit := .T. por ::oBrowse2:Edit()
>> pero claro está, no recibe el caracter pulsado.
>>
>> Gracias.
>>
>>
>> Un Saludo,
>> Xevi.
>>
>>
>> "Ignacio Ortiz de Zúñiga" <
NoName@xailer.com> escribió en el mensaje
>> news:45ef0551$[email=
1@news.xailer.com...]
1@news.xailer.com...[/email]
>>> Xevi,
>>>
>>> Es que esa tecla se procesa por el evento cuando lAllowEdit es .T.,
>>> pasalo a .F. y te tiene que llegar.
>>>
>>> Cuando se pulsa Intro en el browse, si el nMarqueeStyle es de tipo
>>> columna completa se edita la línea completa, en caso contrario se edita
>>> la columna activa, pero siempre que lAllowEdit este a .T.
>>>
>>> Además si en el evento OnEdit de la columna devuelves .F. igualmente
>>> debería llegarte el evento, siempre y cuando no estuvieses en edición
>>> previamente.
>>>
>>> Un saludo,
>>>
>>> --
>>> Ignacio Ortiz de Zúñiga
>>>
http://www.xailer.com
>>>
>>>
>>> "Xevi" <
xevicomas@gmail.com> escribió en el mensaje
>>> news:45ef0351$[email=
1@news.xailer.com...]
1@news.xailer.com...[/email]
>>>> Ignacio,
>>>>
>>>> Parece ser que responde bien, casi como antes... solo he detectado un
>>>> pequeño detalle...
>>>> Un Browse con nMarqueeStyle := bmHIGHLCELL
>>>> en OnKeyDown del Browse hago que al pulsar ENTER se desplace a la
>>>> columna siguiente
>>>> Bien, pues con estos parches que has colgado el Browse no procesa la
>>>> tecla RETURN/ENTER
>>>>
>>>> METHOD Browse2KeyDown( oSender, nKey, nFlags ) CLASS TFrmORAlbarans
>>>> MSGINFO( NKEY )
>>>> ...
>>>>
>>>> Creo recordar que en la 1.2 el Browse procesaba todas las teclas, AVPAG
>>>> REPAG INICIO FIN RETURN...
>>>>
>>>> Gracias.
>>>>
>>>> Un Saludo,
>>>> Xevi.
>>>>
>>>>
>>>> "Ignacio Ortiz de Zúñiga" <
NoName@xailer.com> escribió en el mensaje
>>>> news:45eef75b$[email=
1@news.xailer.com...]
1@news.xailer.com...[/email]
>>>>> Xevi,
>>>>>
>>>>> Acabo de modificar unas cuantas clases para que todos los GridEdit se
>>>>> oculten lo primero de todo y así evitar disparos innecesarios de
>>>>> OnPostEdit. Te lo incluyo con este Email.
>>>>>
>>>>> Un saludo
>>>>>
>>>>> --
>>>>> Ignacio Ortiz de Zúñiga
>>>>>
http://www.xailer.com
>>>>>
>>>>>
>>>>> "Ignacio Ortiz de Zúñiga" <
NoName@xailer.com> escribió en el mensaje
>>>>> news:45eef397$[email=
1@news.xailer.com...]
1@news.xailer.com...[/email]
>>>>>> Xevi,
>>>>>>
>>>>>> Acabo de modificar el ejemplo samplesBrowsesBrwEdit con el
>>>>>> siguiente
>>>>>> código:
>>>>>>
>>>>>>
>>>>>> METHOD ArrayBrowse1Column1PostEdit( oSender, Value, lCanceled, nKey )
>>>>>> CLASS
>>>>>> TForm1
>>>>>>
>>>>>> logdebug( 1 )
>>>>>> ::oArrayBrowse1:SetFocus()
>>>>>> RETURN Nil
>>>>>>
>>>>>> //---------------------------------------------------------- --------------------
>>>>>>
>>>>>> METHOD ArrayBrowse1Column2PostEdit( oSender, Value, lCanceled, nKey )
>>>>>> CLASS
>>>>>> TForm1
>>>>>> logdebug( 2 )
>>>>>> RETURN Nil
>>>>>>
>>>>>> //---------------------------------------------------------- --------------------
>>>>>>
>>>>>> METHOD ArrayBrowse1PostEdit( oSender, lCanceled, nKey ) CLASS TForm1
>>>>>>
>>>>>> logdebug( 0 )
>>>>>> RETURN Nil
>>>>>>
>>>>>> Y en el logdebug siempre obtengo:
>>>>>> 1
>>>>>> 2
>>>>>> 0
>>>>>>
>>>>>> Que es como tiene que ser. Por favor, dime como reproducir ese
>>>>>> lanzamiento
>>>>>> masivo de OnPostEdit. Gracias
>>>>>>
>>>>>> Un saludo
>>>>>>
>>>>>> --
>>>>>> Ignacio Ortiz de Zúñiga
>>>>>>
http://www.xailer.com
>>>>>>
>>>>>>
>>>>>> "Xevi" <
xevicomas@gmail.com> escribió en el mensaje
>>>>>> news:45eee5c4$[email=
1@news.xailer.com...]
1@news.xailer.com...[/email]
>>>>>>> Ignacio,
>>>>>>>
>>>>>>> Creo que he encontrado donde se produce el disparo repetido del
>>>>>>> evento
>>>>>>> OnPostEdit.
>>>>>>> Resulta que en el evento OnPostEdit de mis Browses yo vuelvo el foco
>>>>>>> al
>>>>>>> Browse, por si lo ha perdido en alguna ocasión por abrir alguna
>>>>>>> ventana
>>>>>>> Modal.
>>>>>>> Si saco esta llamada ::MiBrowse:SetFocus() del evento OnPostEdit
>>>>>>> funciona
>>>>>>> correcto y no se dispara dos o mas veces y además el Browse retorna
>>>>>>> a la
>>>>>>> posición donde estava antes del Edit.
>>>>>>>
>>>>>>> Bien, si este cambio se queda así, tendré que rehacer mi código, en
>>>>>>> las
>>>>>>> llamadas forzadas de foco de objetos, para que no lanzen mas
>>>>>>> mensajes de
>>>>>>> los
>>>>>>> deseados.
>>>>>>> Y me queda la duda de ¿cómo haremos una llamada de un Edit de un
>>>>>>> Browse
>>>>>>> que
>>>>>>> en OnPostEdit por la causa que sea abra una ventana Modal y al
>>>>>>> cerrarla
>>>>>>> retorne el foco al objeto que le ha llamado???
>>>>>>> Por eso hasta ahora en el OnPostEdit retornaba el foco al Browse,
>>>>>>> pero
>>>>>>> visto
>>>>>>> lo que hay, me parece que va a ser muy incómodo ¿es así???
>>>>>>>
>>>>>>> Gracias.
>>>>>>>
>>>>>>> Un Saludo,
>>>>>>> Xevi.
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>