*---------------------------------------------------------------*
#include "minigui.ch"
#define DRIVER "DBFCDX"
/*
* Filtro em Browse com OrdScope V. 1.00
* José Carlos dos Santos Jesus - jcsjesus@ufla.br
* 06/10/2005
*/
FUNCTION MAIN
Local aItema,aItemb
///////////////////////////////////////////////////////////////////////////////
// Inicializacion RDD DBFCDX Nativo
///////////////////////////////////////////////////////////////////////////////
REQUEST DBFCDX, DBFFPT
RDDSETDEFAULT( "DBFCDX" ) // tem que ficar dentro da função que vai criar o indice
///////////////////////////////////////////////////////////////////////////////
SET DELETED ON
SET DATE FRENCH
SET CENTURY ON
SET BROWSESYNC ON
set softseek on
*altd()
*FERASE( "teste.cdx" ) // apaga o teste.cdx
*FERASE( "teste.dbf" )
IF !file ("TESTE.DBF")
DBCREATE("TESTE.DBF",{{"CAMPO1","N",5,0},{"CAMPO2","N",5,0}})
USE TESTE
aItema:={}
FOR I=1 TO 10000
FOR A=1 TO 100
TESTE->(DBAPPEND())
TESTE->CAMPO1:=I
TESTE->CAMPO2:=A
NEXT
aadd(aItema,str(i,5,0))
NEXT
aItemb:={"1","2","3","4","5","6","7","8","9","10"}
ELSE
aItema:={}
FOR I=1 TO 10000
FOR A=1 TO 100
NEXT
aadd(aItema,str(i,5,0))
NEXT
aItemb:={"1","2","3","4","5","6","7","8","9","10"}
ENDIF
use teste // Alias teste New
IF !file ("TESTE.CDX")
index on STR(CAMPO1,5,0) TAG indice1 to teste.cdx
index on STR(CAMPO2,5,0) TAG indice2 to teste.cdx
index on STR(CAMPO1,5,0)+ STR(CAMPO2,5,0) TAG indice3 to teste.cdx
ENDIF
set index to teste.cdx
DEFINE WINDOW principal;
AT 82,80 ;
WIDTH 400 ;
HEIGHT 350 ;
TITLE 'Filtro em Browse com Ordscope - v.1.00' ;
ICON '' ;
MAIN ;
BACKCOLOR {212,208,251} ;
FONT 'Sans serif' ;
SIZE 10 ;
DEFINE STATUSBAR
STATUSITEM "Filtrando em 1.000.000 de registros"
END STATUSBAR
@ 31,42 COMBOBOX combo_1 ;
WIDTH 80 ;
FONT 'Sans serif' ;
items aitema;
SIZE 10 ;
ON CHANGE DOCOMBO_1()
@ 35,150 LABEL label_1;
WIDTH 100;
HEIGHT 20;
VALUE "Filtra Campo 1";
BACKCOLOR {212,208,251} ;
FONT "ARIAL";
SIZE 10
@ 61,43 COMBOBOX combo_2 ;
WIDTH 80 ;
FONT 'Sans serif' ;
items aitemb;
SIZE 10 ;
ON CHANGE DOCOMBO_2()
@65,150 LABEL label_2;
WIDTH 100;
HEIGHT 20 ;
VALUE "Filtra Campo 2" ;
BACKCOLOR {212,208,251} ;
FONT "ARIAL" SIZE 10
@255,100 BUTTON Button_1;
CAPTION "Cancelar Filtro" ;
TOOLTIP "Pressione aqui para cancelar o filtro";
WIDTH 100 ;
ON CLICK cancel_filter()
@ 96,41 BROWSE browse_1 ;
OF form ;
WIDTH 180 ;
HEIGHT 139 ;
HEADERS {"Campo 1","Campo 2"} ;
WIDTHS {80,80} ;
WORKAREA teste ;
FIELDS {'teste->CAMPO1','teste->CAMPO2'} ;
VALUE 1
END WINDOW
activate window principal
declare window principal
******************************************************************
STATIC FUNCTION DOCOMBO_1
*ALTD()
xcombo1= str(principal.COMBO_1.VALUE,5,0)
xcombo2= str(principal.COMBO_2.VALUE,5,0)
IF EMPTY(VAL(xcombo2))
ORDSETFOCUS("INDICE1")
CsCOPE := xcombo1
ELSE
ORDSETFOCUS("INDICE3")
CsCOPE := xcombo1+xcombo2
ENDIF
IF LEN(CsCOPE) # 0
TESTE->(OrdScope( 0, CsCOPE))
TESTE->(OrdScope( 1, CsCOPE))
DBGOTOP()
principal.Browse_1.Value := teste->(recno())
principal.BROWSE_1.REFRESH
ELSE
DBGOTOP()
principal.Browse_1.Value := teste->(recno())
OrdScope( 0, NIL)
OrdScope( 1, NIL)
principal.browse_1.REFRESH
ENDIF
RETURN
******************************************************************
STATIC FUNCTION DOCOMBO_2
*ALTD()
xcombo1= str(principal.COMBO_1.VALUE,5,0)
xcombo2= str(principal.COMBO_2.VALUE,5,0)
IF EMPTY(VAL(xcombo1))
ORDSETFOCUS("INDICE2")
CsCOPE := xcombo2
ELSE
ORDSETFOCUS("INDICE3")
CsCOPE := xcombo1+xcombo2
ENDIF
IF LEN(CsCOPE) # 0
TESTE->(OrdScope( 0, CsCOPE))
TESTE->(OrdScope( 1, CsCOPE))
DBGOTOP()
principal.Browse_1.Value := teste->(recno())
principal.BROWSE_1.REFRESH
ELSE
DBGOTOP()
principal.Browse_1.Value := teste->(recno())
OrdScope( 0, NIL)
OrdScope( 1, NIL)
principal.browse_1.REFRESH
ENDIF
RETURN
******************************************************************
FUNCTION cancel_filter
*ALTD()
principal.COMBO_1.VALUE:=0
principal.COMBO_2.VALUE:=0
ORDSETFOCUS("INDICE3")
TESTE->(OrdScope( 0, NIL))
TESTE->(OrdScope( 1, NIL))
DBGOTOP()
principal.Browse_1.Value := teste->(recno())
principal.browse_1.REFRESH
RETURN
******************************************************************

