Página 1 de 1

portar pra indice cdx

Enviado: 14 Jan 2018 20:50
por Nascimento
Amigos vi uma função muito legal na aba de dowloads , justamente o que precisava
mais houve um pequeno detalhe , usa indice ntx no codigo quando portei pra o uso do cdx não funcionou mais como deveria
teria algum amigo que poderia analizar o codigo e saber o porque, eu ate ja tentei mais não consegui ate agora

https://pctoledo.org/forum/fileba ... t=s&page=3

aqui esta o link e abaixo o codigo

Código: Selecionar todos

# Include "Inkey.ch"
Init Function  Main()
Cls
SetColor("GR+/B")
@ 03,02 Clear To 10,65
@ 03,02 To 10,65
//-----------      1         2         3         4         5         6         7
//-----------4567890123456789012345678901234567890123456789012345678901234567890123456
@ 03,03 Say "| Cadastro de Produtos |"
@ 05,04 Say "     Codigo: _____                                   "
@ 06,04 Say "  Descricao: ________________________________________"
@ 07,04 Say "Preco Unit.: _.___,__                                "
@ 08,04 Say " Quantidade: ___.___,___                             "
@ 10,05 Say "[ESC]-Sair  [F3]-Consulta"
TelaPrincipal:=SaveScreen(0,0,24,79)

SetKey(K_F3,{||Pega(ReadVar())})

Do While .T.
   RestScreen(0,0,24,79,TelaPrincipal)
   SetCursor(1)
   SetColor("W+/U,W+/BG,,Gr+/B,W+/U")
   M->Pro_Codigo:=Space(05)
   @ 05,17 Get M->Pro_Codigo Pict "99999"
   Read

   If LastKey() = K_ESC
      Exit
   EndIf

   M->Pro_Codigo:=StrZero(Val(M->Pro_Codigo),5)

   Use Produto Index Codigo,Descri Alias Pro New
   If DbSeek(M->Pro_Codigo)
      M->Pro_Descri:=Pro->Pro_Descri
      M->Pro_PreUni:=Pro->Pro_PreUni
      M->Pro_Quanti:=Pro->Pro_Quanti
      DbCloseArea()
      SetColor("W+/B")
      @ 06,17 Say M->Pro_Descri
      @ 07,17 Say M->Pro_PreUni Pict "@E 9,999.99"
      @ 08,17 Say M->Pro_Quanti Pict "@E 999,999.999"
      @ 11,02 Say "Tecle Enter para Continuar..."
      SetCursor(0)
      Inkey(0)
      SetCursor(1)
   Else
      DbCloseArea()
      Alert("Produto NÆo Cadastrado!")
   EndIf

EndDo
SetColor("")
Cls
Return

Static Function Pega(Var)
Local Regra:="Pro_Quanti = 0"
SetKey(K_F3,.F.)
If LastKey() = K_F3
   If Upper(Var) = "M->PRO_CODIGO"
      M->Pro_Codigo:=Consulta(04,14,18,66,"Produto","Descri.Ntx,Codigo.Ntx",;
                          {"Pro_Codigo","Pro_Descri","Pro_Quanti"},{"C¢digo","Descri‡Æo","Quantidade"},;
                          {"99999","@!","@E 999,999.999"},Regra)
   EndIf

EndIf
SetKey(K_F3,{||Pega(ReadVar())})
Return


Function Consulta(Li,Ci,Lf,Cf,Arquivo,Indices,Campo,Cabecalho,Pict,Regra)

/* Parametros
Li, Ci    - Coordenadas do canto superior esquerdo da janela de visualiza‡Æo
Lf, Cf    - Coordenadas do canto inferior direito da janela de visaliza‡Æo
Arquivo   - Arquivo a ser visualizadp
Indices   - Indices do arquivo
Campo     - Matriz que contem os campos do arquivo a serem  visualizados
Cabecalho - Matriz que contem o cabecalho das colunas a serem visualizados
Pict      - Matriz com as pictures dos campos. Este paramentro ‚ opcional
Regra     - String com a valida‡Æo dos campos. Este parametro ‚ opcional
*/

Local Tela:=SaveScreen(0,0,24,79),Area:=Select(), CorSalva:=SetColor()
Local oMyBrowser, Coluna, nKey, NroDig:=0, Nome:="", Col:=Ci+14

Use (Arquivo) Index (Indices) New  // Troque esta linha pela fun‡Æo que vc utiliza
DbGotop()                          // para abrir seus arquivos em rede

SetColor("U/W")
@ Li,Ci Clear To Lf,Cf
@ Li,Ci To Lf,Cf
@ Li+2,Ci Clear To Lf,Cf
@ Li+2,Ci To Lf,Cf
@ Li+2,Ci Say Chr(195)
@ Li+2,Cf Say Chr(180)
@ Li+4,Ci Say Chr(195)
@ Li+4,Cf Say Chr(180)
@ Li+1,Ci+3 Say "Pesquisar: _________________________"
SetCursor(0)

X:=Campo[2]
oMybrowser:=TBrowseDb(Li+3,Ci+1,Lf-1,Cf-1)
oMybrowser:HeadSep  :=Chr(196) + Chr(196) + CHr(196)
oMybrowser:ColSep   :=Space(01) + Chr(179) + Space(01)
oMybrowser:ColorSpec:="U/W,W+/BG,R/W,R/BG"

For I:=1 To Len(Campo)

    Coluna:=TbColumnNew(Cabecalho[I],FieldwBlock(Campo[I],Select()))
    Coluna:Picture:=Pict[I]
    If Regra # Nil
       Coluna:ColorBlock:={|X| If(&(Regra),{3,4},{1,2})}
    EndIf
    oMybrowser:AddColumn(Coluna)

Next

Do While .T.

   Do While ( ! oMyBrowser:Stabilize() )

      nKey:=InKey()

      If nKey != 0
         Exit
      EndIf

   EndDo

   If oMyBrowser:Stable

      If oMyBrowser:HitTop
         @ Lf,Cf-12 Say "| Inicio |"
      ElseIf oMyBrowser:HitBottom()
         @ Lf,Cf-12 Say "|  Fim   |"
      Else
         @ Lf,Cf-12 Say "ÄÄÄÄÄÄÄÄÄÄ"
      EndIf

      nKey:=Inkey(0)
   EndIf

   If nKey == K_ESC
      DbCloseArea()
      Exit
   ElseIf nKey == K_UP
      oMyBrowser:Up()
   ElseIf nKey == K_DOWN
      oMyBrowser:Down()
   ElseIf nKey == K_LEFT
      oMyBrowser:Left()
   ElseIf nKey == K_RIGHT
      oMyBrowser:Right()
   ElseIf nKey == K_HOME
      oMyBrowser:Home()
   ElseIf nKey == K_END
      oMyBrowser:End()
   ElseIf nKey == K_PGUP
      oMyBrowser:PageUp()
   ElseIf nKey == K_PGDN
      oMyBrowser:PageDown()
   ElseIf nKey == K_CTRL_PGUP
      oMyBrowser:GoTop()
   ElseIf nKey == K_CTRL_PGDN
      oMyBrowser:GoBottom()
   ElseIf nKey == K_CTRL_HOME
      oMyBrowser:PanHome()
   ElseIf nKey == K_CTRL_END
      oMyBrowser:PanEnd()
   ElseIf nKey == K_CTRL_LEFT
      oMyBrowser:PanLeft()
   ElseIf nKey == K_CTRL_RIGHT
      oMyBrowser:PanRight()
   ElseIf nKey == K_ENTER
      Var:=&(Campo[1])
      DbCloseArea()
      Sele(Area)
      RestScreen(0,0,24,79,Tela)
      SetColor(CorSalva)
      SetCurSor(1)
      Return(Var)
   Else
      wDigito:=LastKey()
      If wDigito  = 8
         If NroDig = 0
            Loop
         EndIf
         Col--
         NroDig--
         @ 05,Col Say "_"
         Nome:=Subs(Nome,1,Len(Nome)-1)
         If Empty(Nome)
           oMyBrowser:GoTop()
           Loop
         EndIf
         DbSeek(Upper(Nome),.T.)
         oMyBrowser:RefreshAll()
         Loop
      EndIf
      If NroDig = 25
         Col:=Ci+38
         NroDig--
         Nome:=Subs(Nome,1,Len(Nome)-1)
      EndIf
      Nome:= Nome+Chr(wDigito)
      @ 05,Col Say Upper(Chr(wDigito))
      Col++
      NroDig++
      DbSeek(Upper(Nome),.T.)
      oMyBrowser:RefreshAll()
   EndIf

EndDo
DbCloseArea()
Sele(Area)
RestScreen(0,0,24,79,Tela)
SetColor(CorSalva)
SetCurSor(1)
Return
estou compilando com harbour 3.2

portar pra indice cdx

Enviado: 15 Jan 2018 09:50
por Kapiaba

Código: Selecionar todos

# Include "Inkey.ch"

ANNOUNCE RDDSYS
REQUEST DBFCDX, DBFFPT


//Init Function  Main()

FUNCTION Main()

   SET DATE BRITISH
   SET EPOCH TO 1950
   SET CENTURY ON
   SET SOFTSEEK OFF
   SET WRAP ON
   SETCANCEL( .F. )
   SET CONFIRM OFF
   SET DELETED ON
   SET ESCAPE OFF
   SET EXACT ON
   SET EXCLUSIVE OFF
   SET MULTIPLE OFF

   RDDSETDEFAULT("DBFCDX")

   HB_LANGSELECT( 'PT' )     // Default language is now Portuguese
   HB_SETCODEPAGE( "PT850" )

Cls
SetColor("GR+/B")
@ 03,02 Clear To 10,65
@ 03,02 To 10,65
//-----------      1         2         3         4         5         6         7
//-----------4567890123456789012345678901234567890123456789012345678901234567890123456
@ 03,03 Say "| Cadastro de Produtos |"
@ 05,04 Say "     Codigo: _____                                   "
@ 06,04 Say "  Descricao: ________________________________________"
@ 07,04 Say "Preco Unit.: _.___,__                                "
@ 08,04 Say " Quantidade: ___.___,___                             "
@ 10,05 Say "[ESC]-Sair  [F3]-Consulta"
TelaPrincipal:=SaveScreen(0,0,24,79)

SetKey(K_F3,{||Pega(ReadVar())})

Do While .T.
   RestScreen(0,0,24,79,TelaPrincipal)
   SetCursor(1)
   SetColor("W+/U,W+/BG,,Gr+/B,W+/U")
   M->Pro_Codigo:=Space(05)
   @ 05,17 Get M->Pro_Codigo Pict "99999"
   Read

   If LastKey() = K_ESC
      Exit
   EndIf

   M->Pro_Codigo:=StrZero(Val(M->Pro_Codigo),5)

   Use Produto Index Codigo,Descri Alias Pro New
   If DbSeek(M->Pro_Codigo)
      M->Pro_Descri:=Pro->Pro_Descri
      M->Pro_PreUni:=Pro->Pro_PreUni
      M->Pro_Quanti:=Pro->Pro_Quanti
      DbCloseArea()
      SetColor("W+/B")
      @ 06,17 Say M->Pro_Descri
      @ 07,17 Say M->Pro_PreUni Pict "@E 9,999.99"
      @ 08,17 Say M->Pro_Quanti Pict "@E 999,999.999"
      @ 11,02 Say "Tecle Enter para Continuar..."
      SetCursor(0)
      Inkey(0)
      SetCursor(1)
   Else
      DbCloseArea()
      Alert("Produto NÆo Cadastrado!")
   EndIf

EndDo
SetColor("")
Cls
Return

Static Function Pega(Var)
Local Regra:="Pro_Quanti = 0"
SetKey(K_F3,.F.)
If LastKey() = K_F3
   If Upper(Var) = "M->PRO_CODIGO"
      M->Pro_Codigo:=Consulta(04,14,18,66,"Produto","Descri.Ntx,Codigo.Ntx",;
                          {"Pro_Codigo","Pro_Descri","Pro_Quanti"},{"C¢digo","Descri‡Æo","Quantidade"},;
                          {"99999","@!","@E 999,999.999"},Regra)
   EndIf

EndIf
SetKey(K_F3,{||Pega(ReadVar())})
Return

Function Consulta(Li,Ci,Lf,Cf,Arquivo,Indices,Campo,Cabecalho,Pict,Regra)

/* Parametros
Li, Ci    - Coordenadas do canto superior esquerdo da janela de visualiza‡Æo
Lf, Cf    - Coordenadas do canto inferior direito da janela de visaliza‡Æo
Arquivo   - Arquivo a ser visualizadp
Indices   - Indices do arquivo
Campo     - Matriz que contem os campos do arquivo a serem  visualizados
Cabecalho - Matriz que contem o cabecalho das colunas a serem visualizados
Pict      - Matriz com as pictures dos campos. Este paramentro ‚ opcional
Regra     - String com a valida‡Æo dos campos. Este parametro ‚ opcional
*/

Local Tela:=SaveScreen(0,0,24,79),Area:=Select(), CorSalva:=SetColor()
Local oMyBrowser, Coluna, nKey, NroDig:=0, Nome:="", Col:=Ci+14

Use (Arquivo) Index (Indices) New  // Troque esta linha pela fun‡Æo que vc utiliza
DbGotop()                          // para abrir seus arquivos em rede

SetColor("U/W")
@ Li,Ci Clear To Lf,Cf
@ Li,Ci To Lf,Cf
@ Li+2,Ci Clear To Lf,Cf
@ Li+2,Ci To Lf,Cf
@ Li+2,Ci Say Chr(195)
@ Li+2,Cf Say Chr(180)
@ Li+4,Ci Say Chr(195)
@ Li+4,Cf Say Chr(180)
@ Li+1,Ci+3 Say "Pesquisar: _________________________"
SetCursor(0)

X:=Campo[2]
oMybrowser:=TBrowseDb(Li+3,Ci+1,Lf-1,Cf-1)
oMybrowser:HeadSep  :=Chr(196) + Chr(196) + CHr(196)
oMybrowser:ColSep   :=Space(01) + Chr(179) + Space(01)
oMybrowser:ColorSpec:="U/W,W+/BG,R/W,R/BG"

For I:=1 To Len(Campo)

    Coluna:=TbColumnNew(Cabecalho[I],FieldwBlock(Campo[I],Select()))
    Coluna:Picture:=Pict[I]
    If Regra # Nil
       Coluna:ColorBlock:={|X| If(&(Regra),{3,4},{1,2})}
    EndIf
    oMybrowser:AddColumn(Coluna)

Next

Do While .T.

   Do While ( ! oMyBrowser:Stabilize() )

      nKey:=InKey()

      If nKey != 0
         Exit
      EndIf

   EndDo

   If oMyBrowser:Stable

      If oMyBrowser:HitTop
         @ Lf,Cf-12 Say "| Inicio |"
      ElseIf oMyBrowser:HitBottom()
         @ Lf,Cf-12 Say "|  Fim   |"
      Else
         @ Lf,Cf-12 Say "ÄÄÄÄÄÄÄÄÄÄ"
      EndIf

      nKey:=Inkey(0)
   EndIf

   If nKey == K_ESC
      DbCloseArea()
      Exit
   ElseIf nKey == K_UP
      oMyBrowser:Up()
   ElseIf nKey == K_DOWN
      oMyBrowser:Down()
   ElseIf nKey == K_LEFT
      oMyBrowser:Left()
   ElseIf nKey == K_RIGHT
      oMyBrowser:Right()
   ElseIf nKey == K_HOME
      oMyBrowser:Home()
   ElseIf nKey == K_END
      oMyBrowser:End()
   ElseIf nKey == K_PGUP
      oMyBrowser:PageUp()
   ElseIf nKey == K_PGDN
      oMyBrowser:PageDown()
   ElseIf nKey == K_CTRL_PGUP
      oMyBrowser:GoTop()
   ElseIf nKey == K_CTRL_PGDN
      oMyBrowser:GoBottom()
   ElseIf nKey == K_CTRL_HOME
      oMyBrowser:PanHome()
   ElseIf nKey == K_CTRL_END
      oMyBrowser:PanEnd()
   ElseIf nKey == K_CTRL_LEFT
      oMyBrowser:PanLeft()
   ElseIf nKey == K_CTRL_RIGHT
      oMyBrowser:PanRight()
   ElseIf nKey == K_ENTER
      Var:=&(Campo[1])
      DbCloseArea()
      Sele(Area)
      RestScreen(0,0,24,79,Tela)
      SetColor(CorSalva)
      SetCurSor(1)
      Return(Var)
   Else
      wDigito:=LastKey()
      If wDigito  = 8
         If NroDig = 0
            Loop
         EndIf
         Col--
         NroDig--
         @ 05,Col Say "_"
         Nome:=Subs(Nome,1,Len(Nome)-1)
         If Empty(Nome)
           oMyBrowser:GoTop()
           Loop
         EndIf
         DbSeek(Upper(Nome),.T.)
         oMyBrowser:RefreshAll()
         Loop
      EndIf
      If NroDig = 25
         Col:=Ci+38
         NroDig--
         Nome:=Subs(Nome,1,Len(Nome)-1)
      EndIf
      Nome:= Nome+Chr(wDigito)
      @ 05,Col Say Upper(Chr(wDigito))
      Col++
      NroDig++
      DbSeek(Upper(Nome),.T.)
      oMyBrowser:RefreshAll()
   EndIf

EndDo
DbCloseArea()
Sele(Area)
RestScreen(0,0,24,79,Tela)
SetColor(CorSalva)
SetCurSor(1)
Return

portar pra indice cdx

Enviado: 15 Jan 2018 10:49
por JoséQuintas
mais houve um pequeno detalhe , usa indice ntx no codigo quando portei pra o uso do cdx não funcionou mais como deveria
Faça novamente.

Diferença básica:
- na hora de indexar, colocando tag
- Parece até idiota dizer isto mas parece necessário: índice CDX termina com .CDX, e índice NTX termina com .NTX
- Se não usar arquivo único CDX vale mesmo fonte pra NTX ou CDX, exceto na indexação
- Convém apagar índices anteriores NTX pra ter certeza de que estão sendo usados os índices corretos

portar pra indice cdx

Enviado: 15 Jan 2018 10:58
por JoséQuintas
Faltou acrescentar, porque não sei se já está usando CDX pra valer:

Uma das vantagens do CDX é poder usar arquivo de índice único.
Usar em arquivos separados igual NTX pode ser interessante somente na fase de transferência de um pra outro, ou se estourar o limite de índices dentro de um CDX.
O melhor pra resultado final vai ser arquivo de índice único mesmo, porque conta como 1 arquivo aberto, não importa quantos índices tenham no CDX.

portar pra indice cdx

Enviado: 15 Jan 2018 11:19
por Kapiaba
Mister Quintas Escreveu:

ou se estourar o limite de índices dentro de um CDX.
Mister Quintas cada .CDX suporta até 50 TAGS, acho impossível alguém ter mais que 50 tags em um único CDX.

Abs.

portar pra indice cdx

Enviado: 15 Jan 2018 11:30
por Nascimento
Quintas escreveu:
Faça novamente.

Diferença básica:
- na hora de indexar, colocando tag
- Parece até idiota dizer isto mas parece necessário: índice CDX termina com .CDX, e índice NTX termina com .NTX
- Se não usar arquivo único CDX vale mesmo fonte pra NTX ou CDX, exceto na indexação
- Convém apagar índices anteriores NTX pra ter certeza de que estão sendo usados os índices corretos
sim amigo eu usei tags 2 tags nesse caso ai , e precisaria para anexar ao meu aplicativo principal que fosse via tag mesmo
e não igual a ntx entende
tipo: arquivo1.ntx arquivo2.ntx
preciso que seja um unico arquivo contando 2 tags
e sim fiz isso apaguei os indices , preferi postar o fonte original e expor o meu problema

em vez de "Descri.Ntx,Codigo.Ntx" criei o "produto.cdx" e abri na ordem 1 " set order to 1 " com as 2 tags entende

no dbedit() vai certinho mais eu queria usar o estilo de cores que o tbrowser me possibilita

portar pra indice cdx

Enviado: 15 Jan 2018 14:11
por JoséQuintas
no dbedit() vai certinho mais eu queria usar o estilo de cores que o tbrowser me possibilita
Então vamos começar de novo.... qual é o problema? índice ou cores?
Deu a entender que era problema com CDX.....

portar pra indice cdx

Enviado: 15 Jan 2018 15:17
por Nascimento
vamos lá no dbedit() usando o .cdx eu consigo fazer certo
so que queria usar o tbrowser pois posso usar cores nas colunas que desejar
como esta no exemplo mais compilando o exemplo mudando o indice pra .cdx a funçao não funciona!
rsrs

portar pra indice cdx

Enviado: 15 Jan 2018 16:03
por JoséQuintas
Tanto faz o índice, na prática nem precisa ter índice.

Dois exemplos aqui.... completos até demais..... rs
São os que uso no meu aplicativo inteiro.

https://github.com/JoseQuintas/JoseQuin ... browse.prg

ou separando a parte da cor:

Código: Selecionar todos

   DO WHILE lmore
      DO WHILE ! oBrowse:Stabilize()
      ENDDO
      oBrowse:ColorRect( { oBrowse:RowPos, 1, oBrowse:RowPos, oBrowse:ColCount }, { 3, 3 } ) // linha está com o cursor
      oBrowse:ColorRect( { oBrowse:RowPos, oBrowse:ColPos, oBrowse:RowPos, oBrowse:ColPos }, { 2, 2 } ) // linha/coluna está com o cursor
      nkey := Inkey(0)
      DO CASE
      CASE nKey == K_RBUTTONDOWN
      CASE nKey == K_LBUTTONDOWN

portar pra indice cdx

Enviado: 15 Jan 2018 23:20
por Nascimento
bom vou compilar seu exemplo
muito obrigado amigo

portar pra indice cdx

Enviado: 17 Jan 2018 23:54
por Nascimento
amigo por minha limitação , não entendi seu exemplo não

este que postei ate entendi so não sei porque ele não funciona quando uso .cdx
se fosse possivel mudar ele pra que ele usasse cdx seria o ideal pra meu uso

portar pra indice cdx

Enviado: 18 Jan 2018 01:25
por JoséQuintas
São esses dois comandos pra mudar cor.
Um é para a linha completa, e outro só pra coluna.
Isso permite ter a linha de outra cor, e a coluna de outra: destaca a linha e a coluna aonde está posicionado.

Tem 2 tbrowse no fonte.
Um deles é mais simples.

Só uso CDX, mas o tbrowse funciona pra qualquer índice, e a cor não tem nada a ver com o banco de dados.

portar pra indice cdx

Enviado: 18 Jan 2018 11:21
por rubens
Bom dia...
Eu acho que não tem nada a ver com banco...

Altere essa linha

Código: Selecionar todos

Local Regra:="Pro_Quanti = 0"
Para

Código: Selecionar todos

Private Regra:="Pro_Quanti = 0"
e vê o que acontece...

Rubens

portar pra indice cdx

Enviado: 19 Jan 2018 13:37
por Nascimento
opa amigos depois de muito bater cabeça e com a ajuda de alguns amigos consegui segue o código porque pode ser útil pra mais alguém


Código: Selecionar todos

# Include "Inkey.ch"
Function  Main()
// Adicionada as 3 linhas + laço abaixo pra criar indices .CDX

set date fren
set cent on

request dbfcdx
rddsetdefault('dbfcdx')
dbsetdriver('dbfcdx')
Use Inotafc Index Inotafc Alias Pro
if ! file("inotafc.cdx")
*   clos all
*   use inotafc
   index on numero tag Codigo to inotafc
   index on nome tag descri to  inotafc
   clos all
endif
set index to inotafc
Cls
private Regra:="Pro->Cancelada"
private Regra1:= "Pro->Qtde"
private var:="0"
do while .t.
Consulta(04,02,22,79,"Inotafc",;
                          {"numero","Nome","Qtde","Cancelada","VT","VU"},{"Numero","Descri‡Æo","Quantidade","C","V.Total","V.Unit."},;
                          {"999999","@!@s20","@E 9,999.999","!","@E 999.99","@E 999.99"},Regra)
                          

//sele pro
set order to 1
//var:= StrZero(val(var),6)
   If DbSeek(var)
     iif (cancelada == "S",alert("Nota Cancelada"),alert(pro->nome))
     loop
   endif
exit
end do
                          
Function Consulta(Li,Ci,Lf,Cf,Arquivo,Campo,Cabecalho,Pict,Regra)

/* Parametros
Li, Ci    - Coordenadas do canto superior esquerdo da janela de visualiza‡Æo
Lf, Cf    - Coordenadas do canto inferior direito da janela de visaliza‡Æo
Arquivo   - Arquivo a ser visualizadp
Indices   - Indices do arquivo    // não precisou
Campo     - Matriz que contem os campos do arquivo a serem  visualizados
Cabecalho - Matriz que contem o cabecalho das colunas a serem visualizados
Pict      - Matriz com as pictures dos campos. Este paramentro ‚ opcional
Regra     - String com a valida‡Æo dos campos. Este parametro ‚ opcional  // não precisou
*/

Local Tela:=SaveScreen(0,0,24,79),Area:=Select(), CorSalva:=SetColor()
Local oMyBrowser, Coluna, nKey, NroDig:=0, Nome:="", Col:=Ci+14

set orde to 1   

DbGotop()                          // para abrir seus arquivos em rede

SetColor("U/W")
@ Li,Ci Clear To Lf,Cf
@ Li,Ci To Lf,Cf
@ Li+2,Ci Clear To Lf,Cf
@ Li+2,Ci To Lf,Cf
@ Li+2,Ci Say Chr(195)
@ Li+2,Cf Say Chr(180)
@ Li+4,Ci Say Chr(195)
@ Li+4,Cf Say Chr(180)
SetCursor(0)
oMybrowser:=TBrowseDb(Li+3,Ci+1,Lf-1,Cf-1)
oMybrowser:HeadSep  :=Chr(196) + Chr(196) + CHr(196)
oMybrowser:ColSep   :=Space(01) + Chr(179) + Space(01)
oMybrowser:ColorSpec:="U/W,W+/BG,R/W,R/BG,W+"

For I:=1 To Len(Campo)  
    Coluna:=TbColumnNew(Cabecalho[I],FieldwBlock(Campo[i],Area))
    Coluna:Picture:=Pict[I]  // mascara dos campos
    oMybrowser:AddColumn(Coluna)
    **********************************************************************
	 *      caso eu retire aqui colore todas as colunas mas ;             *
	 * caso eu queira so uma coluna especifica escolho o numero da mesma  *
	 **********************************************************************
    If i = 4   
       oMybrowser:getcolumn(i):colorblock:={ ||iif(&(regra) = 'S',{3,4},{1,2})}
     *********************************************************  
     * dessa maneira posso colorir a coluna individualmente  *
	  * e a que eu quizer                                     *
     *********************************************************
	  endif  
     if i = 3
      Coluna= oMybrowser:getcolumn(i)
	    Coluna:colorblock:={||iif(&(regra1) >= 10,{5,1},{1,2})}
    EndIf     
Next

Do While .T.

   Do While ( ! oMyBrowser:Stabilize() )

      nKey:=InKey()

      If nKey != 0
         Exit
      EndIf

   EndDo

   If oMyBrowser:Stable

      If oMyBrowser:HitTop
         @ Lf,Cf-12 Say "| Inicio |"
      ElseIf oMyBrowser:HitBottom()
         @ Lf,Cf-12 Say "|  Fim   |"
      Else
         @ Lf,Cf-12 Say "ÄÄÄÄÄÄÄÄÄÄ"
      EndIf

      nKey:=Inkey(0)
   EndIf

   If nKey == K_ESC
     // DbCloseArea()
      Exit
   ElseIf nKey == K_UP
      oMyBrowser:Up()
   ElseIf nKey == K_DOWN
      oMyBrowser:Down()
   ElseIf nKey == K_LEFT
      oMyBrowser:Left()
   ElseIf nKey == K_RIGHT
      oMyBrowser:Right()
   ElseIf nKey == K_HOME
      oMyBrowser:Home()
   ElseIf nKey == K_END
      oMyBrowser:End()
   ElseIf nKey == K_PGUP
      oMyBrowser:PageUp()
   ElseIf nKey == K_PGDN
      oMyBrowser:PageDown()
   ElseIf nKey == K_CTRL_PGUP
      oMyBrowser:GoTop()
   ElseIf nKey == K_CTRL_PGDN
      oMyBrowser:GoBottom()
   ElseIf nKey == K_CTRL_HOME
      oMyBrowser:PanHome()
   ElseIf nKey == K_CTRL_END
      oMyBrowser:PanEnd()
   ElseIf nKey == K_CTRL_LEFT
      oMyBrowser:PanLeft()
   ElseIf nKey == K_CTRL_RIGHT
      oMyBrowser:PanRight()
   ElseIf nKey == K_ENTER
      Var:=&(Campo[1])  // em que campo preciso dar o seek
*      DbCloseArea()
*      Sele(Area)
      RestScreen(0,0,24,79,Tela)
      SetColor(CorSalva)
      SetCurSor(1)
      Return(Var)
   EndIf
EndDo

*DbCloseArea()
*Sele(Area)
RestScreen(0,0,24,79,Tela)
SetColor(CorSalva)
SetCurSor(1)
Return
dbf usado no teste
INOTAFC.rar
usei essa dbf do amigo rubens
(15.1 KiB) Baixado 145 vezes