/* PESQUISA INCREMENTAL - por Orlando Felipe Martins da Costa
orlandofmc@bol.com.br
Nova Era - MG - Brasil
- Original do Clipper, adaptado para o FiveWin em 02/01/2003
- Criticas serao sempre bem vindas. Ajude-nos a melhorar esta rotina.
- Nao aceita caracteres acentuados e cedilhas. Podemos melhorar isto?
- Copie para a mesma pasta o arquivo de dados CUSTOMER.DBF do samples, ou
adapte a rotina para seus arquivos.
*/
#include "FiveWin.ch"
#include "TCBrowse.ch"
*#include "TSBrowse.ch"
//===========================================================================
FUNCTION MAIN()
USE CUSTOMER ALIAS "CUSTOMER"
SET FILTER TO !EMPTY(FIRST)
If !FILE("CUSTOMER.NTX")
INDEX ON UPPER(FIRST) TO CUSTOMER
ENDIF
SET INDEX TO CUSTOMER.NTX
DEFINE WINDOW oWnd FROM 0, 0 TO 29, 78 TITLE FWVERSION + " - Browse Para Busca Incremental - orlandofmc@bol.com.br" MENU BuildMenu()
SET MESSAGE OF oWnd TO "orlandofmc@bol.com.br" CLOCK DATE KEYBOARD CENTERED
@ 03,10 SAY oS1 PROMPT FIRST SIZE 400,16 COLOR "B/W+" OF oWnd UPDATE
ACTIVATE WINDOW oWnd MAXIMIZED // ON INIT PESQUISA(oWnd)
CLOSE DATABASES
RETURN NIL
//===========================================================================
FUNCTION BUILDMENU()
LOCAL oMenu
MENU oMenu
MENUITEM "&PESQUISA - Alt+F5" ;
ACCELERATOR ACC_ALT, VK_F5 ;
ACTION PESQUISA(oWnd),oWnd:UPDATE() ;
MESSAGE "Executa o Browse da Pesquisa Incremental"
MENUITEM "&Registro" ;
ACTION MsgInfo(FIRST) ;
MESSAGE "Mostra o registro atual"
MENUITEM "&Fim" ;
ACTION oWnd:End() ;
MESSAGE "Sai do Programa"
ENDMENU
RETURN oMenu
//===========================================================================
FUNCTION PESQUISA(oWnd)
LOCAL oBrw, oFont1
PUBLIC cPesq:=""
PRIVATE oDlg, OldRecno:=RECNO()
DEFINE FONT oFont1 NAME "Courier New" SIZE 0,16 BOLD
DEFINE DIALOG oDlg FROM 5,5 TO 350, 620 OF oWnd ;
TITLE "Pesquisa Incremental - Por OrlandoFMC" PIXEL
ODLG:LHELPICON := .F. // Desliga a "?" da Caixa de Dialogo.
cPesq="" ; cPos="|"
DEFINE FONT oFntTimes NAME "Times New Roman" SIZE 0,-12
@ 165,40 SAY "Para localizar, digite as letras iniciais. - [backSpace] para corrigir." PIXEL FONT oFntTimes;
COLOR RGB(000,000,255) // AZUL
@ 21 , 32.5 SAY oSay3 PROMPT cPOS SIZE 180,07 COLOR "r+/W" UPDATE PIXEL
@ 18 , 33.9 SAY oSay1 PROMPT cPesq SIZE 180,08 COLOR "N+/W*" UPDATE PIXEL
@ 28 , 01 COLUMN BROWSE oBrw OF oDlg ;
SIZE 300, 135 ;
ON DBLCLICK oDlg:End();
MESSAGE "Para localizar, digite as letras iniciais. - [backSpace] para corrigir." ;
Alias "CUSTOMER" COLOR "N/W" PIXEL
obrw:bKeyDown :={|nKey,nFlags| Incremental(nKey,"CUSTOMER",oBrw,oSay1,oSay3,oDlg)}
oBrw:cOrderType:= "C"
oBrw:aJustify := {.T., .T.} // Justifica os Cabe‡alhos Esq. .T. =Centro
oBrw:nFreeze := 1
ADD COLUMN TO BROWSE oBrw DATA Recno() SIZE 60 NOBAR CENTER ;
HEADER "Registro"
ADD COLUMN TO BROWSE oBrw DATA CUSTOMER->FIRST SIZE 100 ;
HEADER "Nome "
@ 03, 33 BUTTON oBtn1 PROMPT "&OK = [ENTER]" OF oDlg SIZE 150,11 ACTION oDlg:End() ;
MESSAGE "C o n f i r m a a p e s q u i s a" PIXEL
oBtn1:ctooltip:=OemToAnsi("Confirma a pesquisa")
@ 03,210 BUTTON oBtn2 PROMPT "&Cancela = [ESC]" OF oDlg SIZE 58,09 ACTION {||DBGOTO(OldRecno), oDlg:End()} ;
MESSAGE "C a n c e l a a p e s q u i s a" PIXEL
oBtn2:ctooltip:=OemToAnsi("Cancela a pesquisa")
@ 03,275 BUTTON oBtn3 PROMPT "&Help" OF oDlg SIZE 22,09 ;
MESSAGE "A j u d a p a r a a p e s q u i s a" PIXEL ;
ACTION {||MSGINFO(;
OemToAnsi('- OPیES para localizar:')+CRLF+CRLF+;
OemToAnsi(' 1¦) PESQUISA INCREMENTAL:')+CRLF+;
OemToAnsi(' A cada letra digitada, o cursor, em azul, ir se aproximando do nome procurado.')+CRLF+;
OemToAnsi(' Em geral, bastam 3 ou 4 letras, e o nome estar vis¡vel na janela.')+CRLF+;
OemToAnsi(' Enquanto se digita, o texto vai sendo visualizado na etiqueta branca. Um pequeno')+CRLF+;
OemToAnsi(' tra‡o vermelho sob a mesma indica a posi‡Æo do cursor na digita‡Æo.')+CRLF+;
OemToAnsi(' Use BackSpace para corrigir erros ao digitar.')+CRLF+CRLF+;
OemToAnsi(' 2¦) SETAS ACIMA e ABAIXO, PgUp e PgDw.')+CRLF+CRLF+;
OemToAnsi(' 3¦) Usando o mouse sobre a BARRA DE ROLAGEM VERTICAL … direita.')+CRLF+CRLF+;
OemToAnsi('- Ap¢s logalizado o nome, pressione o botÆo "OK" ou a tecla "ENTER" ou "Alt+O",')+CRLF+;
OemToAnsi(' ou dˆ um DUPLO-CLIQUE sobre o nome selecionado.')+CRLF+CRLF+;
OemToAnsi('- Se desistir da pesquisa, pressione o botÆo "CANCELA" ou a tecla "ESC" ou "Alt+C".')+CRLF+CRLF;
,OemToAnsi('Como pesquisar:')),;
oBrw:SetFocus }
oBtn3:ctooltip:=OemToAnsi("Ajuda a pesquisa")
SET FONT OF oBrw TO oFont1
SET FONT OF oDlg TO oFont1
ACTIVATE DIALOG oDlg CENTERED
oWnd:UPDATE()
RETURN NIL
//===========================================================================
FUNCTION INCREMENTAL(nKey, Alias, oBrw, oSay1, oSay3, oDlg)
DO CASE
CASE nKey = VK_ESCAPE
GO OldRecno ; oWnd:UPDATE() ; oDlg:End() ; RETURN .T.
CASE nKey = 13
oWnd:UPDATE() ; oDlg:End() ; RETURN .T.
CASE nKey=8 // backspace
If Len(cPesq) > 0
cPesq:=Left(cPesq,Len(cPesq)-1)
Endif
* CASE (nKey>=32 .and. nKey<=150)
CASE (nKey>=48 .and. nKey<=122) .OR. nKey=32
* CASE (nKey>=48 .and. nKey<=150) .OR. nKey=32 .OR. nKey=199 .OR. nKey=135
cPesq+=(CHR(nKey))
OTHERWISE ; RETURN .T.
ENDCASE
cPesq=LEFT(cPesq,LEN(FIRST))
cPOS=SPACE(LEN(cPesq))+"|"
SEEK cPesq SOFTSEEK
oBrw:REFRESH()
odlg:UPDATE()
oSay3:cTitle(cPos)
oSay1:cTitle(cPesq)
RETURN .T.
//===========================================================================