PREENCHER GET COM P

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Sergio_ASSilva
Usuário Nível 2
Usuário Nível 2
Mensagens: 92
Registrado em: 09 Mar 2006 10:58
Localização: Santo Estevão (Ba)

PREENCHER GET COM P

Mensagem por Sergio_ASSilva »

Olá Pessoal,


Algutem tem alguma fucao que complete o Get com a medida que a gente vai digitando as letras, um pouco doiferente da pesquisa letra a letra que vamos digitando e vai aparecendo os nomes e depois nos selecionamos com Ente.


Grato
Clipper 5.3a/Blinker 7/DBFNTX
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: PREENCHER GET COM P

Mensagem por sygecom »

Sergio_ASSilva escreveu:Olá Pessoal,


Algutem tem alguma fucao que complete o Get com a medida que a gente vai digitando as letras, um pouco doiferente da pesquisa letra a letra que vamos digitando e vai aparecendo os nomes e depois nos selecionamos com Ente.


Grato
Tche, essa é Boa, mas CLIPPER não é EXCEL...entaum acho que para isso que vc esta citando funcionar, vc vai ter que alterar o GETSYS.PRG...agora como alterar e onde alterar eu não sei pq nunca mexi no GETSYS.PRG...se quiser dar uma olhada em um exemplo que adptei para tbrowse do letra a letra pode baixar no link abaixo:
http://www.sygecom.com.br/xharbour/letra_a_letra.zip

Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Se for pra fazer uma caixa de edição como nos programas Windows, nem mesmo alterando a GETSYS pra dar jeito, já que nela o controle de edição é feito pelos pseudo-objetos da classe GET. Teria de ser feito outro GETSYS, mas sem o uso dessa classe; implementando tudo na unha.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Mensagem por Augusto »

Pessoal... eu posso até estar falando alguma besteira... mais até onde eu sei, o "efeito" que o parceiro quer implementar, semelhante ao "auto-completar" do Excel ou até mesmo do OutLook entre outros, só é possível prq a rotina invoca uma base de dados (digamos assim) que guarda em bytes as últimas "x" entradas via teclado daquela máquina...

Talvez, se quizessemos implementar algo parecido em Clipper, o caminho (lógica/algorítimo) seja esse...
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

A lógica é mais ou menos essa. Os dados podem residir num buffer pra facilitar o trabalho, da mesma forma que se faz num combo box qualquer em Windows. Mas o problema está em implementar isso no GETLIST. De forma nativa, só com os métidos da classe GET não dá pra fazer.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Sergio_ASSilva
Usuário Nível 2
Usuário Nível 2
Mensagens: 92
Registrado em: 09 Mar 2006 10:58
Localização: Santo Estevão (Ba)

Mensagem por Sergio_ASSilva »

Obrigado a todos pela atenção.
Clipper 5.3a/Blinker 7/DBFNTX
Avatar do usuário
Zoc
Usuário Nível 1
Usuário Nível 1
Mensagens: 20
Registrado em: 24 Set 2004 13:08
Localização: Leme/SP

Mensagem por Zoc »

Sergio,

Se o campo que vai preencher for indexado, dá para usar a rotina abaixo:

Código: Selecionar todos

cNOME = space(40)
@ 10,10 GET cNOME    PICT "@!""  WHEN BUSCANOME()
READ


// Faça alterações necessária para adequar ao seu programa
// A alteração será no indice, nas cores e nas coordenadas do get
/////////////////////////////
FUNCTION BUSCANOME
LOCAL tam, buf, get, pos, lin, col, tec, n_nsx
N_NSX := INDEXORD()
DBSETORDER(1)           // set order do seu indice
get := GETACTIVE()
lin := get:row
col := get:col
buf := get:VarGet()
tam := LEN(buf)
pos := 1
SETCOLOR("w+/b")
@ 10,10 CLEAR TO 10,49     // coordenadas do seu get
DO WHILE .T.
   @ 10,10 CLEAR TO 10,49    // coordenadas do seu get
   SETPOS(lin, col)
   DISPOUT(buf)
   SETCOLOR("w+/b")
   SET COLOR TO W+/R
   SETPOS(lin, col - 1 + pos)
   tec := INKEY(0)
   IF tec >= 32 .AND. tec <= 255
      TEC := ASC( UPPER( CHR( TEC )))
      buf := LEFT(buf, pos - 1) + CHR(tec) + SUBS(buf, pos + 1)
      IF DBSEEK(LEFT(buf, pos), .T.)
         buf := LEFT(&(INDEXKEY(0)), tam)
      ELSE
         buf := LEFT(buf, pos) + SPACE( TAM - POS)
      ENDIF
      pos := MIN(tam, pos + 1)
   ELSEIF tec == K_LEFT
      pos := MAX(1, pos - 1)
   ELSEIF tec == K_RIGHT
      pos := MIN(tam, pos + 1)
   ELSEIF tec == K_HOME
      pos := 1
   ELSEIF tec == K_END
      pos := MIN(tam, LEN(TRIM(buf)) + 1)
   ELSEIF tec == K_BS
      IF pos > 1
         pos --
         buf := LEFT(buf, pos - 1) + SUBS(buf, pos + 1) + " "
      ENDIF
   ELSE
      KEYB CHR(tec)
      get:VarPut(buf)
      get:UpdateBuffer()
      DBSETORDER( N_NSX )
      RETURN .T.
   ENDIF
ENDDO
[/code]
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

Rapaz,

Eu acho que tenho uma função que faz isso! Peguei em algum site, mas não lembro em qual...

Quando eu chegar em casa vou olhar se encontro, valeu?

Jânio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
Sergio_ASSilva
Usuário Nível 2
Usuário Nível 2
Mensagens: 92
Registrado em: 09 Mar 2006 10:58
Localização: Santo Estevão (Ba)

Mensagem por Sergio_ASSilva »

Perfeitamente Zoc!!


Era esta rotina que eu queria. Fiz as mudancas e funcionou legal.

Obrigado
Clipper 5.3a/Blinker 7/DBFNTX
Avatar do usuário
Netavin
Usuário Nível 3
Usuário Nível 3
Mensagens: 306
Registrado em: 28 Fev 2007 08:37
Localização: Cacoal-RO

BUSCAR NOME

Mensagem por Netavin »

Bom dia Zoc !!
Colega, achei interessantíssimo sua rotina. Tentei implementá-la. Porém o programa informa que não existe a variável K_LEFT. Tenho que inicializá-la primeiro ??

Grato!

Netavin
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: BUSCAR NOME

Mensagem por Maligno »

Netavin escreveu:o programa informa que não existe a variável K_LEFT. Tenho que inicializá-la primeiro ??
Esse é o código da tecla seta à esquerda. Basta incluir o header INKEY.CH no seu programa.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Netavin
Usuário Nível 3
Usuário Nível 3
Mensagens: 306
Registrado em: 28 Fev 2007 08:37
Localização: Cacoal-RO

GET

Mensagem por Netavin »

... valeu amigo Malígno !!!
Como não pensei nisso antes de escrever ..!?
Desculpe-me!!
Sinceros agradecimentos!

[]´s

Netavin.
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: GET

Mensagem por Maligno »

Netavin escreveu:... valeu amigo Malígno !!!
Como não pensei nisso antes de escrever ..!?
São os pequenos detalhes que fazem a diferença. Eu sofro com esse tipo de esquecimento o tempo todo com C e C++, que são linguagens altamente dependentes de headers. O remédio pra isso é desconfiar sempre. Faça como eu faço. Eu sempre me digo coisas do tipo: "Aposto que vai dar errado.", "Deu certo! Mas deve ter algo errado!". :)))
Desculpe-me!!
Não tem do que se desculpar. Isso acontece. :)
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

O exemplo que o colega Zoc deu, acho que resolveu. Mas gostaria de adicionar um exemplo que eu tenho no cadastro de clientes, onde cadastra-se a empresa onde trabalha. Este exemplo servirá para demostrar a exibição da empresa fora do focus do GET onde o usuário digita (aparecendo a sugestão ao estilo Windows). Fiz esta função para que o usuário não precise digitar muito, consultando um BD de empresas da qual tiro proveito para mala-direta. Portanto não permito que haja duplicidade de registros. A procura da empresa é em modo FANTASIA, isto é, o nome reduzido ou nome mais conhecido da empresa. Mesmo que no meu exemplo abaixo eu tenha colocado poucos campos (para facilitar compreensão), nesse BD daria para acrescentar outros campos como endereço, telefone, CNPJ, etc. Neste exemplo também pode ser utilizado para corregir certos tipos de erros cometido pelo usuário. Por exemplo colocar "APOSENTADO" como nome da empresa.

Código: Selecionar todos

SETCOLOR("N/W")
CLS
CONTECOR := { "09/01","00/07","15/04","15/01","00/03","00/07","04/07","08/07","15/03","15/02","15/04","14/07","15/03" }
IF !FILE("EMPRESAS.DBF")
   CRIARQS()
ENDIF
SELE 4
USE EMPRESAS INDEX EMPRE001,EMPRE003
V_EMP:=SPACE(20)
V_COD_EMP:=1
TELA_TRAB=SAVESCREEN(14,05,17,78)
@ 13,08 SAY " Local de Trabalho.....:"
@ 13,33 SAY V_EMP COLOR CONTECOR[8]
@ 13,82 GET V_COD_EMP PICT "9999" WHEN MUDA_EMP(V_COD_EMP)
READ
@ 14,08 SAY " Codigo da Empresa.....: "+STRZERO(V_COD_EMP,6,0)

FUNCTION MUDA_EMP(V_COD_EMP,XMSG)
// MENSAGEM("Digite o nome da empresa onde trabalha")
SET CURSOR ON
VP=1
VQL1=ROW()
VQC1=COL()
VX1=13
VY1=33
IF V_COD_EMP=0
   V_EMP=SPACE(20)
ELSE
   SELE 4
   SET ORDER TO 1
   SEEK STRZERO(V_COD_EMP,4,0)
   IF FOUND()
      V_EMP=(4->FANTASIA)
   ELSE
      V_EMP=SPACE(20)
   ENDIF
ENDIF
VT=LEN(V_EMP)
DECLARE LETRAS[VT]
FOR VI=1 TO VT
    LETRAS[VI]:=SUBSTR(V_EMP,VI,1)
NEXT
@ VX1,VY1 SAY V_EMP COLOR CONTECOR[9]
@ VX1,VY1-1+VP SAY "" COLOR CONTECOR[9]
DO WHILE .T.
   PASS=''
   FOR VI=1 TO VT
       PASS=PASS+LETRAS[VI]
   NEXT
   IF LEN(ALLTRIM(PASS))>2
      SELE 4
      SET ORDER TO 2
      SEEK ALLTRIM(PASS)
      IF FOUND()
         RESTSCREEN(14,05,17,78,TELA_TRAB)
	 VTAM=LEN(ALLTRIM(PASS))
	 @ 14,30+VTAM TO 16,VTAM+31+LEN(ALLTRIM(4->FANTASIA)) COLOR CONTECOR[4]
	 @ 15,31+VTAM SAY ALLTRIM(4->FANTASIA) COLOR CONTECOR[4]
	 SOMBRA(14,30+VTAM,16,VTAM+31+LEN(ALLTRIM(4->FANTASIA)))
      ELSE
         RESTSCREEN(14,05,17,78,TELA_TRAB)
      ENDIF
   ELSE
      RESTSCREEN(14,05,17,78,TELA_TRAB)
   ENDIF
   @ VX1,VY1-1+VP SAY "" COLOR CONTECOR[9]
   CODI=INKEY(0)
   IF CODI=0
      LOOP
   ELSEIF CODI=25  // Ctrl-Y
      VP=1
      AFILL(LETRAS,SPACE(1))
      FOR VI=VP TO VT
	  @ VX1,VY1-1+VI SAY LETRAS[VI] COLOR CONTECOR[9]
      NEXT
      LOOP
   ELSEIF CODI=8 .AND. VP>1  // Backspace, Ctrl-H
      VP=VP-1
      ADEL(LETRAS,VP)
      LETRAS[VT]=SPACE(1)
      FOR VI=VP TO VT
	  @ VX1,VY1-1+VI SAY LETRAS[VI] COLOR CONTECOR[9]
      NEXT
   ELSEIF CODI=8 .AND. VP=1
      LOOP
   ELSEIF CODI=19 .AND. VP>1 .AND. VP<=VT  //  Left arrow, Ctrl-S
      @ VX1,VY1-1+VP SAY LETRAS[VP] COLOR CONTECOR[9]
      VP=VP-1
      LOOP
   ELSEIF CODI=7  //  Del, Ctrl-G
      ADEL(LETRAS,VP)
      LETRAS[VT]:=" "
      FOR VI=VP TO VT
	  @ VX1,VY1-1+VI SAY LETRAS[VI] COLOR CONTECOR[9]
      NEXT
   ELSEIF CODI=5    // Up
      KEYBOARD CHR(5)
      EXIT
   ELSEIF CODI=24  // Down
      KEYBOARD CHR(24)
      EXIT
   ELSEIF CODI=18 .OR. CODI=3 .OR. CODI=26 .OR. CODI=2 .OR. CODI=29 .OR. CODI=23 .OR. CODI=31 .OR. CODI=30 .OR. CODI=10 .OR. CODI=9 .OR. CODI=28 .OR. CODI<0
      EXIT
   ELSEIF CODI=6  //  End, Ctrl-F
      PASS=''
      FOR VI=1 TO VT
	  PASS=PASS+LETRAS[VI]
      NEXT
      IF LEN(RTRIM(PASS))=20
	 VP=LEN(RTRIM(PASS))
      ELSE
	 VP=LEN(RTRIM(PASS))+1
      ENDIF
      @ VX1,VY1-1+VP SAY LETRAS[VP] COLOR CONTECOR[9]
      RELEASE VI,PASS
      LOOP
   ELSEIF CODI=22     //  Ins, Ctrl-V
      IF READINSERT()=.T.
	 READINSERT(.F.)
	 SETCURSOR(1)
      ELSE
	 READINSERT(.T.)
	 SETCURSOR(3)
      ENDIF
      LOOP
   ELSEIF CODI=1  //  Home, Ctrl-A
      VP=1
      @ VX1,VY1-1+VP SAY LETRAS[VP] COLOR CONTECOR[9]
      LOOP
   ELSEIF CODI=19 .AND. VP=1
      LOOP
   ELSEIF CODI=4 .AND. VP<=VT	//   Right arrow, Ctrl-D
      @ VX1,VY1-1+VP SAY LETRAS[VP] COLOR CONTECOR[9]
      VP=VP+1
   ELSEIF CODI=13
      PASS=''
      FOR VI=1 TO VT
	  PASS=PASS+LETRAS[VI]
      NEXT
      IF VPROFIS(PASS)=.T.
	 EXIT
      ENDIF
   ELSEIF CODI=27
      FOR VI=1 TO VT
	  LETRAS[VI]:=SUBSTR(V_EMP,VI,1)
      NEXT
      EXIT
   ELSE
      IF READINSERT()=.T.
	 AINS(LETRAS,VP)
	 LETRAS[VP]:=UPPER(CHR(CODI))
	 FOR VI=VP TO VT
	     @ VX1,VY1-1+VI SAY LETRAS[VI] COLOR CONTECOR[9]
	 NEXT
      ELSE
	 LETRAS[VP]=UPPER(CHR(CODI))
	 @ VX1,VY1-1+VP SAY UPPER(CHR(CODI)) COLOR CONTECOR[9]
      ENDIF
      VP=VP+1
   ENDIF
   IF VP>VT
      EXIT
   ENDIF
ENDDO

IF LASTKEY()=13
   PASS=''
   FOR VI=1 TO VT
       PASS=PASS+LETRAS[VI]
   NEXT
   @ VQL1,VQC1 SAY ""
   IF !EMPTY(ALLTRIM(PASS))
      SELE 4
      SET ORDER TO 2
      SEEK ALLTRIM(PASS)
      IF FOUND()
	 V_COD_EMP=(4->COD_EMP)
      ELSE
         V_COD_EMP=SEQ_PEGA() // Procura numero sequencial (exemplo)
	 SELE 4
         IF RLOCK()
	    REPLACE COD_EMP WITH V_COD_EMP, FANTASIA WITH PASS
            UNLOCK
	 ENDIF
      ENDIF
      VRET=STRZERO(V_COD_EMP,4,0)
   ELSE
      VRET=REPLICATE("0",4)
   ENDIF
ELSE
   VRET=STRZERO(V_COD_EMP,4,0)
ENDIF
KEYBOARD VRET
RELEASE LETRAS,VT,VP,VI,VX1,VY1
RELEASE VQL1,VQC1,CODI
RESTSCREEN(14,05,17,78,TELA_TRAB)
SELE 1
RETURN .T.

FUNCTION VPROFIS(PASS)
DO CASE
   CASE "DO LAR" $ PASS
	VRET=.F.
   CASE "APOSENTAD" $ PASS
	VRET=.F.
   CASE "PEDREIR" $ PASS
	VRET=.F.
   CASE "GUARDA" $ PASS
	VRET=.F.
   CASE "CABELEIREIR" $ PASS
	VRET=.F.
   CASE "TRABALHANDO" $ PASS
	VRET=.F.
   CASE "GERENTE" $ PASS
	VRET=.F.
   CASE "GERENCIA" $ PASS
	VRET=.F.
   CASE "PROPRIETARI" $ PASS
	VRET=.F.
   CASE "ESTUDANTE" $ PASS
	VRET=.F.
   CASE "PENSIONISTA" $ PASS
	VRET=.F.
   CASE "RESERVISTA" $ PASS
	VRET=.F.
   CASE "TAXISTA" $ PASS
	VRET=.F.
   CASE "OPERADOR" $ PASS
	VRET=.F.
   CASE "AUXILIAR" $ PASS
	VRET=.F.
   CASE "MOTORISTA" $ PASS
	VRET=.F.
   CASE "ELETRICISTA" $ PASS
	VRET=.F.
   CASE "PADEIRO" $ PASS
	VRET=.F.
   CASE "LOJISTA" $ PASS
	VRET=.F.
   CASE "POR CONTA" $ PASS
	VRET=.F.
   CASE "EMPRESARIO" $ PASS
	VRET=.F.
   CASE "AUTONOM" $ PASS
	VRET=.F.
   CASE "RETIRAD" $ PASS
	VRET=.F.
   CASE "DESEMPREGAD" $ PASS
	VRET=.F.
   CASE "DOMESTIC" $ PASS
	VRET=.F.
   CASE "EMPREGAD" $ PASS
	VRET=.F.
   OTHERWISE
      VRET=.T.
ENDCASE
IF VRET=.F.
   TONE( 250, 4 )
   ALERT("Aten‡„o: Esta n„o ‚ nome de empresa.;Deixe em branco este campo e coloque como observa‡„o.")
ENDIF
RETURN VRET

FUNCTION SOMBRA( LIN_SUP, COL_SUP, LIN_INF, COL_INF )
IF PCOUNT() = 2 .OR. PCOUNT() = 3
   C_SOM := COL_SUP; L_SOM := LIN_SUP
   LIN_SUP := VAL( SUBS( C_SOM, 1, 2 ) )
   COL_SUP := VAL( SUBS( C_SOM, 3, 2 ) )
   LIN_INF := VAL( SUBS( C_SOM, 5, 2 ) )
   COL_INF := VAL( SUBS( C_SOM, 7, 2 ) )
   COL_SOM := SUBS( C_SOM, 9 )
   LIN_SOM := L_SOM
ENDIF
IF COL_SUP < 2 .OR. LIN_INF > 22
   C_SOM := ""; L_SOM := ""
   RETURN .F.
ENDIF
IF PCOUNT() = 3
   RESTSCREEN( LIN_SUP + 1, COL_SUP - 2, LIN_INF + 1, COL_SUP - 1, COL_SOM )
   RESTSCREEN( LIN_INF + 1, COL_SUP - 2, LIN_INF + 2, COL_INF - 2, LIN_SOM )
   RETURN .F.
ENDIF
IF PCOUNT() != 2
   COL_SOM := SAVESCREEN( LIN_SUP + 1, COL_SUP - 2, LIN_INF + 1, COL_SUP - 1 )
   LIN_SOM := SAVESCREEN( LIN_INF + 1, COL_SUP - 2, LIN_INF + 2, COL_INF - 2 )
ENDIF
IF SUBS( COL_SOM, 2, 1 ) != CHR( 8 )
   C_SOM := STR( LIN_SUP, 2 ) + STR( COL_SUP, 2 ) + STR( LIN_INF, 2 ) +;
	    STR( COL_INF, 2 ) + COL_SOM
   L_SOM := LIN_SOM
ENDIF
FOR I = 2 TO LEN( COL_SOM ) STEP 2
   COL_SOM := STUFF( COL_SOM, I, 1, CHR( 8 ) )
NEXT
FOR I = 2 TO LEN( LIN_SOM ) / 2 STEP 2
   LIN_SOM := STUFF( LIN_SOM, I, 1, CHR( 8 ) )
NEXT
RESTSCREEN( LIN_SUP + 1, COL_SUP - 2, LIN_INF + 1, COL_SUP - 1, COL_SOM )
RESTSCREEN( LIN_INF + 1, COL_SUP - 2, LIN_INF + 2, COL_INF - 2, LIN_SOM )
RETURN .T.

FUNCTION SEQ_PEGA()
// Este exemplo de sequencial, nao ‚ aconselhado (fiz este para nao complicar)
VRET:=LASTREC()+1
RETURN VRET

FUNCTION CRIARQS()
CAMPOS:={{"COD_EMP" ,"N",010,000},;
         {"EMPRESA" ,"C",036,000},;
         {"FANTASIA","C",020,000} }
DBCREATE("EMPRESAS.DBF",CAMPOS)
SELE 4
USE EMPRESAS EXCLUSIVE
TEXT TO FILE("EMPRESAS.TXT" )
1,"SADIA TRADING S/A","SADIA"
2,"BANCO BRADESCO AGHH","BANCO BRADESCO"
3,"GRUPO BANDEIRAS DE TELEVISAO","BANDEIRANTES"
4,"BANCO DO ESTADO DE SAO PAULO","BANCO BANESPA"
ENDTEXT
APPEND FROM EMPRESAS.TXT DELI
GOTO 1
DELE
PACK
INDEX ON STRZERO(COD_EMP,4,0) TO EMPRE001
INDEX ON FANTASIA TO EMPRE003
CLOSE 4
RETURN NIL
O exemplo acima pode ser compilado que irá criar um arquivo DBF e NTX para sua funcionabilidade. Digite como exemplo a palavra "BAN" e irá aparecer o primeiro banco cadastrado mas se digitar "BAND" irá muda para BANDEIRANTES, também pode ser testado com a palavra "SAD".

Cabe lembrar a você que caso haja necessidade de cadastrar nova empresa o sistema acatará ao confirmar com <ENTER>.

Bem, espero que gostem e tenha servidor para outros propósitos também.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Olá,

Se não me engano no Clipper 5.3 já existem prontas as classes para listbox e combobox... Eu também prefiro usar um TBrowse mas conforme for até um achoice poderia ser implementado, vai da criatividade... Se tiver interesse nas classes mencionadas é só dar uma olhadinha no NG.

Falou!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Responder