Problemas:
1) Si lo hago directamente escribiendo el filtro, --- set filter to alltrim(x_nom) $ ORASUNTO --- funciona bien pero no si lo intento hacer con ---set filter to alltrim( x_nom) $ indexord(0)---, indexord(0) me devuelve lo mismo ORASUNTO. Quiero intentar que sea automatico, o sea, que me haga el filtro solo por los campos que tiene el indice activo.
2) Defino la variable privada oMsgFilter (en el main.prg) y la añado a la barra cuando ejecuto el filtro (que esta en un otro prg que se ejecuta despues del main), y cuando la cancelo esta se elimina. Este procedimiento solo me lo deja ejecutar una vez y nunca me deja poner el oMsgFilter a nil.
Os dejo el codigo por si me podeis decir algo
function filter ()
Local oDlg ,oNom, x_nom := " "
Local cText := ""
Local lOk := .F. //Defino una variable para el paso al proceso siguiente en el dialogo
//Cuadro de petición de datos.
DEFINE DIALOG oDlg FROM 12, 12 TO 24, 65 TITLE "Filtrar por: " + x_nind[indexord()]
@ 2, 2 SAY "Filtro: " OF oDlg
@ 2, 9 GET oNom VAR x_nom OF oDlg PICTURE "@!" SIZE 100,12
@ 4, 10 BUTTON "&Ok" OF oDlg SIZE 40, 12 ;
ACTION ( lOk := .T. , oDlg:End() )
@ 4, 18 BUTTON "&Cancelar" OF oDlg SIZE 40, 12 ;
ACTION ( lOk := .F. , oDlg:End() )
ACTIVATE DIALOG oDlg CENTERED
if lOk = .T.
//? indexkey(0) devuelve ORASUNTO (el campo)
//? x_nind[indexord()] devuelve ASUNTO (el literal del campo)
IF oMsgFilter == NIL //Si no esta activo pongo el mensaje en la barra
DEFINE MSGITEM oMsgFilter OF oWndEdit:oMsgBar ;
PROMPT "Filtro lento" ;//
SIZE 80;
TOOLTIP "Filtro activo lento, pulsa aquí para cambiar el filtro";
COLOR CLR_WHITE, CLR_HRED ;
ACTION filter()
ENDIF
//set filter to alltrim(x_nom) $ indexkey(0) ---Esto no funciona
set filter to alltrim(x_nom) $ ORASUNTO //Así funciona
DbGotop()
else
IF oMsgFilter != NIL
? oMsgFilter --- objeto
oWndEdit:oMsgBar:DelItem(oMsgFilter)
? oMsgFilter --- objeto
// oMsgFilter:= nil //nunca me deja poner el mensaje a nil me da error
ENDIF
set filter to
endif
oBrw:refresh()
return nilAndrés González desde Mallorca