En la función Qseek no activa el cSortOrder mientras no se de click en la cabecera de la columna.
Cuando se pusla BackSpace para borrar la cadena de búsqueda se queda con el primer carácter.
Luego de hacer _ he logrado que lo realice, pero al mover el puntero o click en el browse se ubica en el registro delprimer carácter, al parecer lo mantiene en buffer.
Si se hizo un búsqueda y luego se pulsa la tecla HOME no borra el contenido del oSay.
Quizas exista otra manera de buscar, que no he encontrado en el foro.
Aquí parte del código y la función con las modificaciones.
Code: Select all
DEFINE DIALOG oDlg RESOURCE "MUE_EMPL" Title "EMPLEADOS";oDlg:lHelpIcon:=.F.
@0,0 xBrowse oBrw Of oDlg AUTOCOLS AUTOSORT
oBrw:setdolphin(oQry,.F.)
oBrw:nMarqueeStyle:=5
oBrw:lHScroll:=.F.
oBrw:lAllowRowSizing:= .f.
oBrw:nColDividerStyle:=LINESTYLE_LIGHTGRAY
oBrw:nRowDividerStyle:=LINESTYLE_LIGHTGRAY
oBrw:bClrSelFocus:={ || { CLR_BLACK, { { 0.10,16777215,12961221 } }} }
oBrw:bClrSel:={ || { CLR_BLACK, { { 0.30,16777215,12961210 } }} }
oBrw:lRecordSelector:=.F.
oBrw:lAllowColHiding := .f.
oBrw:lAllowColSwapping := .f.
oCol:=oBrw:AddCol()
oCol:bStrData := { || oQry:CODIGO }
oCol:nHeadStrAlign := AL_CENTER
oCol:cHeader:= "COD."
oCol:nWidth:=30
oCol:cSortOrder := "CODIGO"
oCol:bLClickHeader:= {|| oBrw:Gotop() }
oCol:=oBrw:AddCol()
oCol:bStrData := { || oQry:NOMBRE }
oCol:nHeadStrAlign := AL_CENTER
oCol:cHeader := "NOMBRE Y APELLIDOS"
oCol:nWidth:=223
oCol:cSortOrder := "NOMBRE"
oCol:bLClickHeader:= {|| oBrw:Gotop() }
oBrw:CreateFromResource(105)
REDEFINE SAY oSay ID 114 OF oDlg UPDATE PICTURE "@!"
oBrw:bSeek := { | c | QSeek( c,oBrw,oSay ) }
ACTIVATE DIALOG oDlg CENTERED
//...
FUNCTION QSeek( c, oBrw, oSay )
LOCAL oQry := oBrw:oMySql
LOCAL cSortOrder, nStart
LOCAL uData, nNum, lRet
STATIC aLastRec := {}
nNum := AScan( oBrw:aCols, {| o | !Empty( o:cOrder ) } )
IF nNum < 1
nNum:=1 ////Linea agregada para que ordene por la 1ra columna
//RETURN FALSE
ENDIF
cSortOrder := oBrw:aCols[ nNum ]:cSortOrder
IF Len( c ) == 1
aLastRec := {}
ENDIF
IF Len( aLastRec ) < Len( c )
IF Len( aLastRec ) == 0
nStart := 1
ELSE
nStart := oQry:RecNo()
ENDIF
AAdd( aLastRec, nStart )
ELSE
ASize( aLastRec, Len( c ) - 1 )
IF Len( aLastRec ) == 0
nStart := 1
aLastRec := {};c:="";oSay:Refresh();oBrw:GoTop();oBrw:Refresh();__KeyBoard(chr(1)) //Linea agregada
ELSE
nStart := ATail( aLastRec )
ENDIF
ENDIF
IF HB_IsObject( oSay )
oSay:SetText( Upper( c ) )
ENDIF
lRet := ( oQry:Seek( c, cSortOrder, nStart-1, oQry:LastRec(), !oQry:FieldType( cSortOrder )=='N', .T. ) != 0 )
RETURN lRet
Saludos,
Adhemar