Xevi,
Incluyo el méodo corregido.
Un saludo,
//---------------------------------------------------------- ----------------
METHOD ChangeFocus( oFrom, lBack ) CLASS XBrowse
LOCAL oCol, oFst, oLst
LOCAL nPos, nLen, nLast, nFor, nTmp
LOCAL lUpd
nPos := ::aDisplay[ oFrom:nPos ]
nLen := Len( ::aCols )
lUpd := .F.
// Primera columan editable
FOR nFor := 1 TO nLen
WITH OBJECT ::aCols[ nFor ]
IF :IsVisible() .AND. :nEditType != beNONE .AND. :oGridEdit:lEnabled
..AND. :oGridEdit:lVisible
oFst := HB_QWith()
EXIT
ENDIF
END WITH
NEXT
//Ultima columna editable
FOR nFor := nLen TO 1 STEP -1
WITH OBJECT ::aCols[ nFor ]
IF :IsVisible() .AND. :nEditType != beNONE .AND. :oGridEdit:lEnabled
..AND. :oGridEdit:lVisible
oLst := HB_QWith()
EXIT
ENDIF
END WITH
NEXT
IF ! lBack
nPos ++
// Buscamos siguiente columna editable
DO WHILE nPos <= nLen
WITH OBJECT ::aCols[ nPos ]
IF :IsVisible() .AND. :nEditType != beNONE .AND.
:oGridEdit:lEnabled .AND. :oGridEdit:lVisible
oCol := HB_QWith()
EXIT
ENDIF
END WITH
nPos++
ENDDO
// Sino se encontro ninguna columna ir a la primera editable
IF oCol == Nil .AND. oFst != NIL
::GoLeftMost()
oCol := oFst
lUpd := .T.
ENDIF
// Forzar que la columna este completamente visible
IF oCol != Nil
DO WHILE oCol:nPos == 0
::GoRight( .T. )
lUpd := .T.
ENDDO
nTmp := ::nColOffset
DO WHILE ! ::IsColVisible( oCol, .T. ) .AND. ! ( oCol == oFst )
::GoRight( .T. )
IF nTmp == ::nColOffset
EXIT
ENDIF
lUpd := .T.
ENDDO
ENDIF
// Actualizar la posición de los GridEdits
IF lUpd
::UpdGridEdits()
ENDIF
// Cambiar el foco
IF oCol != Nil .AND. !( oCol == oFrom )
oCol:oGridEdit:SetFocus()
RETURN .T.
ENDIF
ELSE
nPos--
// Buscamos anterior columna editable
DO WHILE nPos >= 1
WITH OBJECT ::aCols[ nPos ]
IF :IsVisible() .AND. :nEditType != beNONE .AND.
:oGridEdit:lEnabled .AND. :oGridEdit:lVisible
oCol := HB_QWith()
EXIT
ENDIF
END WITH
nPos--
ENDDO
// Sino se encontro ninguna nos vamos a la ultima editable
IF oCol == Nil
oCol := oLst
lUpd := .T.
nTmp := ::nColOffset
DO WHILE ! ::IsColVisible( oCol, .T. ).AND. ! ( oCol == oFst )
::GoRight( .T. )
IF nTmp == ::nColOffset
EXIT
ENDIF
ENDDO
ENDIF
// Forzar que este completamente visible
IF oCol != Nil
DO WHILE oCol:nPos == 0 .AND. ::nColOffset > 1
::GoLeft( .T. )
lUpd := .T.
ENDDO
nTmp := ::nColOffset
DO WHILE ! ::IsColVisible( oCol, .T. ) .AND. ::nColOffset > 1
::GoLeft( .F. )
lUpd := .T.
IF nTmp == ::nColOffset
EXIT
ENDIF
ENDDO
IF lUpd
::UpdGridEdits()
ENDIF
IF !( oCol == oFrom )
oCol:oGridEdit:SetFocus()
RETURN .T.
ENDIF
ENDIF
ENDIF
RETURN .F.
--
Ignacio Ortiz de Zúñiga
[Soporte Xailer]
[Xailer support]
"Xevi" <
xevicomas_quitar_esto@gmail.com> escribió en el mensaje
news:48f5976c$[email=
1@ozsrv2.ozlan.local...]
1@ozsrv2.ozlan.local...[/email]
> Ignacio,
>
> ¿No sería mejor forzar !lEnabled si !lVisible ???
>
> Un Saludo,
> Xevi.
>
>
> "Xevi" <
xevicomas_quitar_esto@gmail.com> escribió en el mensaje
> news:48f59428$[email=
1@ozsrv2.ozlan.local...]
1@ozsrv2.ozlan.local...[/email]
>> Bien, se me ha ocurrido utilizar las dos propiedades al mismo tiempo... y
>> así SI me funciona correctamente.
>>
>> Cuando lEnabled := .F. pues además establezco lVisible := .F.
>>
>>
>> Un Saludo,
>> Xevi.
>>
>>
>> "Xevi" <
xevicomas_quitar_esto@gmail.com> escribió en el mensaje
>> news:[email=
48f58356@ozsrv2.ozlan.local...]
48f58356@ozsrv2.ozlan.local...[/email]
>>> En un Browse donde entro en modo edición, pongamos el caso de todas las
>>> columnas tengan la propiedad nEditType establecida beGET, (sucede el
>>> mismo comportamiento si nEditType se establece a otro valor).
>>>
>>> Pongamos el caso que dependiendo de si se entra algún valor o no en una
>>> columna en concreto, por ejemplo la primera columna la dejamos vacia...
>>> ocultamos los Edits de la columna 4... la primera columna está
>>> rellena... ocultamos los edits de las columnas 2 y 5.
>>> Bien pues cuando la columna que tiene el foco es una anterior a una
>>> columna con un edit NoVisible... por mas que pulse return o tab... el
>>> foco no salta al siguiente edit Visible.
>>>
>>> Adjunto un ejemplo donde muestra este "fallo" de salto de foco.
>>>
>>> Si en lugar de utilizar oGridEdit:lVisible utilizo oGridEdit:lEnabled...
>>> el salto de foco lo realiza correctamente... ahora bien, para facilitar
>>> la captura de datos a mis clientes, necesito poder "ocultar" esas
>>> columnas que no van a ser "editadas", sinó me dicen que "les crean
>>> confusión".
>>>
>>> Gracias.
>>>
>>> Un Saludo,
>>> Xevi.
>>>
>>>
>>>
>>>
>>
>>
>
>