TBROWSE

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

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 »

ohhh come on... Eder !

Veja que re-editei a minha mensagem no código-fonte, tem mais alguma implementações que poderão ser úteis para o pessoal daqui do FORUM que queira compilar e testar. Desculpas por ter utilizado seu mesmos dados, mas eu acabei aprendendo mais uma com TEXT e ENDTEXT, veja que legal.

Um clip-abraço :)Pos
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

Não esquenta Pablo , os dados são nossos , e outra coisa aquele *.dbf como voce pode perceber eu apenas creie para os teste , ñ tem nenhum dado importante , mesmo por que o programa no qual pretendo usar o Tbrowse() ñ esta funcionando mas o vai funcionar assim que eu terminar essas implementações com o Tbrowse() enquanto ñ fica funional pra ñ fica bom , eu até havia pensado em por os itens na tela em forma de realtório e mandar o usuario digitar o numero do item a ser alterado mas ae ñ ficaria "DA HORA" hehehe té+++ :)´ :%
C:\Xharbour\Xdev\Fw\VSX
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

Código: Selecionar todos

#define AR_SKIPBLOCK(atb,ai,VETOR) atb:skipblock={|n, sa| sa:=ai,iif(ai+n > LEN(VETOR[1]), ai:= LEN(VETOR[1]), iif(ai+n < 1, ai:=1, ai += n)), ai-sa}


Bom dia Pablo e amigos do forum !


__Pablo voce poderia me explicar qual seria a finalidade dessa linha , ñ estou compriendendo o codigo , pois nele contem alguns comandos que ñ compriendo ,tambem vejo que tem umas variaveis na qual tambem ñ intendo as funcionalidades , enfim essa linha esta cusando uma serie de confusões na minha cabeza ...

qual seria a finalidade ►

IIf =

||=

C:\Xharbour\Xdev\Fw\VSX
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 »

Caro Eder, tá certo que o meu potuguês não é lá aquelas coisas... mas por favor não me confunda com palavras espanholas e mal empregadas e ainda junto seu texto com o do tipo "CODE"... por favor...

No TBROWSE convecional (aquele que é feito com os campos de um DBF, vamos dizer), você entendeu o que faz a função SKIPPER ?. Vou intentar te resumir o que essa instrução faz:

Basicamente serve para limitar o acionamento do seu cursor (na hora da navegação) dentro do seu TBROWSE. Isto é, não deixa estrapolar a exibição dentro dos limites (primeiro e ultimo "registro" ou "elemento" no caso de TBROWSE com MATRIZ). Tire essa função e verá como se comporta.

Afinal, está dando certo o TBROWSE no seu sistema ?

Um clip-abraço :)Pos
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

Basicamente serve para limitar o acionamento do seu cursor (na hora da navegação) dentro do seu TBROWSE. Isto é, não deixa estrapolar a exibição dentro dos limites (primeiro e ultimo "registro" ou "elemento" no caso de TBROWSE com MATRIZ). Tire essa função e verá como se comporta.

Entendi perfeitamente o que ela faz apenas ñ compreendi a forma que foi elaborada, ou seja é como se ñ consegui-se ler o codigo como citei a cima tem alguns comando que ainda ñ conheço e ñ tem no NG

Afinal, está dando certo o TBROWSE no seu sistema ?
Colocarei no meu assim que compreender perfeitamente a função para que no futuro ñ possa vir a ter problemas com isso .



Ei pablo ja ouvi mesmo voce dizendo em alguns tópicos que é "gringo"
de onde voce é ??



Quanto ao a meu post anterior , ficou misturado pois estava com preça e realmente ñ quis arrumar , agora quanto a "Cabeza " Foi proposital , a quem goste de uma discontração e quem não goste ...Quanto a isso ñ posso fazer nada , Foi mal :(Neg :)Pos té +++
C:\Xharbour\Xdev\Fw\VSX
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 »

ederxc escreveu:Entendi perfeitamente o que ela faz apenas ñ compreendi a forma que foi elaborada, ou seja é como se ñ consegui-se ler o codigo como citei a cima tem alguns comando que ainda ñ conheço e ñ tem no NG
Olha... que o NG tem ein... Que seria o que você não consegue LER ?.
ederxc escreveu:Colocarei no meu assim que compreender perfeitamente a função para que no futuro ñ possa vir a ter problemas com isso
Ahhh bom, pensei que ja estava pronto
ederxc escreveu:Ei pablo ja ouvi mesmo voce dizendo em alguns tópicos que é "gringo" de onde voce é ?
iiiiiiihhhh, acho melhor deixar de lado, que TODA vez que há FUTEBOL eu fico na mira de TODOS... hehe
ederxc escreveu:Quanto ao a meu post anterior, ficou misturado pois estava com preça e realmente ñ quis arrumar
Mas sabe que mesmo que a mensagem tenha sido enviada, depois dá pra RE-EDITÁ-LA, claro que entre primeiramente com o seu LOGIN.
ederxc escreveu: agora quanto a "Cabeza " Foi proposital, a quem goste de uma discontração e quem não goste ...Quanto a isso ñ posso fazer nada , Foi mal
Não colega, não foi mal não, é que soa um pouco agressivo... mas eu ja estou acostumado com essas coisas.

Sei que é difcil Eder, entender tudo de uma só vez, eu levei muito tempo para entender o TBROWSE, mas lembre que quando se trata de TBROWSE tudo é tratado como OBJETO (se bem que há programadores de outras linguagens, e que não iriam muito concordar com essa definição de OBJETO, ou ao menos quase isso), daí então você deve fazer uso frequente das funções como AEVAL, EVAL, FIELDBLOCK, etc...

Nessa questão específica, você com o NG tem que dar uma olhada em:

\LANGUAGE\CLASSES\TBROWSE\SKIPBLOCK

Mas não pense que eu domino tudo de BLOCK E ARGUMENTOS E DEFINES, eu apanho um pouco ainda. Aconselho que só adapte essas primeiras linhas quando precisar para outros casos.

Um clip-abraço :)Pos
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

Bom dia Pablo, e amimgos do forum !


:)Pos Pablo , trabalhei em cima do exemplo que voce me mandou e consegui fazer com que fique com minha cara , ao invez de usar o ACHOICE() usei um DBEDITE() com vetores e ficou bem legau , quando estiver totamente completo esse browse() eu lhe mando o fonte com o executavel para voce ver como ficou nosso trabalho! Mais uma vez lhe agradeço , pois se ñ fosse sua ajuda eu ñ teria aprendido a trabalhar com vetores e tbrowse() creio que com essa empreitada meu "leque" de opções almentou e muito !

Té+++ amigo e tenha uma otima semana ... :|< :{
C:\Xharbour\Xdev\Fw\VSX
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 »

Caro Eder,

Que bom que tenha servido a você e espero que a outros colegas também. É tão bom ver um colega sempre se superando e demostrando o se agradecimento, pois isso tudo alimenta a nossa vontade de ajudar.

Quando você diz que trocou o ACHOICE() pelo DBEDIT(), na verdade você quiz dizer pelo TBROWSE() mesmo. Na minha opinião o uso do DBEDIT() é superado pelo TBROWSE() pela funções internas que possue, que nos permitem fazer maior interação nas edições, exibições dos dados.

Mesmo sabendo que deu certo para tua finalidade, esse TBROWSE de vetores que te passei, quero te alertar que neste fim de semana, me deparei com uma situação que antes eu não tinha percebido. A utilização de MATRIZ aninhada, na seguinte modalidade (por exemplo):

Código: Selecionar todos

AR:={{},{},{},{}}
AADD(AR[1],"NOME A") 
AADD(AR[2],0) 
AADD(AR[3],CTOD("01/02/2007")) 
AADD(AR[4]," ") 

AADD(AR[1],"NOME B") 
AADD(AR[2],1) 
AADD(AR[3],CTOD("22/01/2007")) 
AADD(AR[4]," ") 

AADD(AR[1],"NOME C") 
AADD(AR[2],5) 
AADD(AR[3],CTOD("12/04/2007")) 
AADD(AR[4]," ") 

AADD(AR[1],"NOME D") 
AADD(AR[2],8) 
AADD(AR[3],CTOD("05/03/2007")) 
AADD(AR[4]," ")
Não diriamos que esteja totalmente errada, mas por causa de essa disponibilização, não permite utilizar o ASORT() para ordenar os vetores (digamos por ordem de data). Bem ao menos, é isso que chegamos na conclusão no sábado com os colegas Eolo e Maligno ( Ver este tópico ).

Não quer dizer que estaria errado criar uma matriz assim, pois senão não estaria disponível para ser feita assim), mas em seu contexto final, digamos que ela não é uma MATRIZ "convencional", apenas tem um cacarteristica diferente com o aninhamento de elementos na MATRIZ. E este tipo de estrutura, não facilita em nada a sua ordenação, caso que precise fazé-lo.

Eu, irei refazer o TBROWSE que o que básicamente irá mudar é na exibição e edição do elementos, onde antes para pegar o primeiro elemento como exemplo VETOR[1,aindex] agora ja para a MATRIZ CONVENCIONAL (digamos) deverá mencionar como VETOR[aindex,1].

Portanto a criação de MATRIZES, de forma convencional, deveria ser assim (por exemplo):

Código: Selecionar todos

AR:={} 
AADD(AR,{"NOME A", 0, CTOD("01/02/2007"), " "}) 
AADD(AR,{"NOME B", 1, CTOD("22/02/2009"), " "}) 
AADD(AR,{"NOME C", 5, CTOD("12/04/2007"), " "}) 
AADD(AR,{"NOME D", 8, CTOD("05/03/2007"), " "})
Com esta estrutura, que NORMALMENTE é assim que são criadas, é possível utilizar o ASORT().

Mas não se assuste Eder, que se você não tiver que ordenar a sua MATRIZ para ser exibida no seu TBROWSE, não faz mal que ela continue assim como eu tinha indicado. Só que de agora em mais, era bom todos nós seguirmos o PADRÃO de como criar a MATRIZ. Assim, não iremos correr o risco de mais tarde precisar alterar o código-fonte dos nossos aplicativos.

Viu ? Como TODOS nós SEMPRE temos coisas a aprender ?. Mas tudo isto, serve para ACRESCENTAR conhecimento.

Um clip-abraço :)Pos
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

Me deixe ver se entendi

Resumindo, voce esta querendo dizer que os vetores estavam armazenando os campos de forma ordenada por um indice, e com a função ASORT() voce estaria mudando esta ordem de exibição ???

Se for isso entendo

mas qual seria a finalidade desse tipo de matriz , por acaso seria evitar de criar diverços indices para o mesmo banco ??(#-)
C:\Xharbour\Xdev\Fw\VSX
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 »

Sim isso mesmo Eder. Você entendeu. Isto é, se você quizer alterar a ordem de exibição da MATRIZ nesse TBROWSE que fizemos juntos, você irá encontrar-se com uma GRANDE DIFICULDADE. Claro que IMPOSSÍVEL não é, mas seria razoável, te empregado outra estrutura de MATRIZ para evitar que futuramente queira ordenar por outra coluna do TBROWSE.

Mas eu acho ainda, que no seu caso, ainda não é um problema. Sabe que se você quer pode até fazer uma rotina para pesquisar o elemento do vetor que cujo conteúdo voce esteja procurando. Digamos que você queira procurar determinada DESCRIÇÃO. Daí o ASCAN(), procura entre vetores, o conteúdo que satisfaça a sua procura (algo assim como o SEEK ou LOCATE). Isso, ainda que com essa estrutura que está, irá funcionar da mesma forma. O que não estaria possibilitando é o uso do ASORT() no processamento em BLOCO. Mas o importante de tudo isto, que você está conseguindo entender, e pouco a pouco você irá dominar a técnica de tratamento de OOP que seria para complementar o uso do TBROWSE que trabalha com "Programação Orienta a Objetos", mesmo que alguns relutem a reconhecer que seja OPP.

Um clip-abraço :)Pos
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

Quando você diz que trocou o ACHOICE() pelo DBEDIT(), na verdade você quiz dizer pelo TBROWSE() mesmo. Na minha opinião o uso do DBEDIT() é superado pelo TBROWSE() pela funções internas que possue, que nos permitem fazer maior interação nas edições, exibições dos dados.

Não , quis dizer BDEDIT() mesmo , é uma espécie de menu dentro do TBROWSE() para alterar fornecedores



PS.: Tomara que eu nunca precise fazer asort() heheehe , mas é sempre assim quando voce mesnos espera vem alguem e diz "para fazer isso que precisa ira precisar usar a tal função" é sempre assim ,amigo valeu or mais essa té+++
C:\Xharbour\Xdev\Fw\VSX
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 »

ederxc escreveu:Não , quis dizer DBEDIT() mesmo
Não entendí, ainda. Desse TBROWSE, você fez uma chamada de DBEDIT() ainda ??. Lembre que existe a possibilidade de fazer um TBROWSE, dentro de outro TBROWSE.
ederxc escreveu:Tomara que eu nunca precise fazer asort()...
Desculpe, não era a minha intenção de dificultar... Mas veja pelo lado BÃO do negócio... graças a isto, aprendemos um pouco mais sobre VETORES... hehe

Agora, veja bem que as modificações que são necessárias para "RE-ESTRUTURAR" a criação de MATRIZES e edição n TBROWSE que eu tinha passado. Vou repetí-lo porém com as novas interpretações. Entenda-se que as linhas no código-fonte que estão em modo "COMENTÁRIO", são as que anteriormente estavam e seguido ficam as que devem ser utilizadas a fim de que a MATRIZ se torne "CONVENCIONAL" e não ter mais esse conceito como válido para TBROWSES. OK ?.

Código: Selecionar todos

#include "inkey.ch"
// #define AR_SKIPBLOCK(atb,ai,VETOR) atb:skipblock={|n, sa| sa:=ai,iif(ai+n > LEN(VETOR[1]), ai:= LEN(VETOR[1]), iif(ai+n < 1, ai:=1, ai += n)), ai-sa}
#define AR_SKIPBLOCK(atb,ai,VETOR) atb:skipblock={|n, sa| sa:=ai,iif(ai+n > LEN(VETOR), ai:= LEN(VETOR), iif(ai+n < 1, ai:=1, ai += n)), ai-sa}

set score off
set date british
set cent on
set dele on
set epoc to 2000
SET CONSOLE OFF
cls
setcolor('gr+/b')
IF !FILE("LANCNF.DBF")
   CAMPOS:={{"NF"      ,"N",010,000},;
            {"ITEM"    ,"N",003,000},;
            {"DATEMI"  ,"D",008,000},;
            {"FORN"    ,"N",003,000},;
            {"MOSTFORN","C",030,000},;
            {"PROD"    ,"N",013,000},;
            {"MOSTPROD","C",030,000},;
            {"GASET"   ,"N",003,000},;
            {"SET"     ,"C",030,000},;
            {"UNI"     ,"C",005,000},;
            {"QUANT"   ,"N",009,002},;
            {"VOL"     ,"N",003,000},;
            {"VALUNI"  ,"N",009,002},;
            {"VALTOT"  ,"N",009,002},;
            {"DATLANC" ,"D",008,000},;
            {"OBS"     ,"C",030,000} }
   DBCREATE("LANCNF.DBF",CAMPOS)
ENDIF
use lancnf
IF LASTKEY()=0
TEXT TO FILE("EDER.TXT" )
1,1,20070101,1,"JURANDIR",3,"OLEO SOLUVEL",1,"FIACAO","BD",2.00,2,50.00,100.00,20070502,""
1,2,20070101,2,"JURANDIR",2,"ROLAMENTO",3,"TEXTIMA","PC",5.00,1,15.00,75.00,20070502,""
1,3,20070101,1,"JURANDIR",20,"TAMBOR PARA OLEO",1,"FIACAO","TB",1.00,1,100.50,100.50,20070502,""
2,1,20070101,1,"EDER",22,"BORRACHA",7,"ESCRITORIO TECNICO","CX",50.00,5,0.30,15.00,20070502,""
2,2,20070101,2,"EDER",21,"CANETA",7,"ESCRITORIO TECNICO","CX",50.00,2,0.50,25.00,20070502,""
ENDTEXT
   APPEND FROM EDER.TXT DELI
   GOTO 1
   DELE
   PACK
ENDIF
INDEX ON (STR(NF,10,0)+DTOS(DATEMI)+STR(ITEM,3,0)) TO XCOMP
set index to xcomp
dispbox(00,00,24,79,2)

vNF=1
vdatemi=ctod("01/01/2007")
aindex=1
@02,01 SAY 'NOTA FISCAL.:'
@02,30 SAY "DATA DE EMISSAO.:"
@02,14 GET  VNF  PICT '9999999999'
@02,47 GET  VDATEMI PICT '99/99/9999'
READ
IF LASTKEY()=27
   DBCLOSEAREA()
   RETURN
ENDIF
setcolor('w+/b')
// VETOR:={{},{},{},{}}
VETOR:={}
chave=(STR(VNF,10,0)+DTOS(VDATEMI))
IF !DBSEEK(CHAVE)
   @ 24,00 SAY PADC("Nota n„o encontrada !",80) COLOR "N/W"
   INKEY(3)
   return
ENDIF
Do while (chave)=str(NF,10)+dtos(datemi)
   /*
   AADD(VETOR[1],NF)
   AADD(VETOR[2],item)
   AADD(VETOR[3],datemi)
   AADD(VETOR[4],forn)
   */
   AADD(VETOR,{NF,item,datemi,forn})
   skip
enddo
VETOR:=tabela(VETOR)

/*
Apos editar a matriz, voce pode fazer o REPLACE de acordo com as
alteracoes feitas na matriz ou poderia faze-las diretamente no
LANCNF.DBF.
*/
SEEK STR(VNF,10,0)+DTOS(VDATEMI)
FOR I=1 TO LEN(VETOR)
/*
FOR I=1 TO LEN(VETOR[1])
    REPLACE NF WITH VETOR[1,I]
    REPLACE ITEM WITH VETOR[2,I]
    REPLACE DATEMI WITH VETOR[3,I]
    REPLACE FORN WITH VETOR[4,I]
    */
    REPLACE NF WITH VETOR[I,1]
    REPLACE ITEM WITH VETOR[I,2]
    REPLACE DATEMI WITH VETOR[I,3]
    REPLACE FORN WITH VETOR[I,4]
    SKIP
NEXT


FUNCTION TABELA(VETOR)
setcolor('n/gb')
@06,03 clear to 20,76
dispbox(06,03,20,76)
oMybrowser:=TBrowseDb(07,04,19,75)

oMybrowser:HeadSep  :=Chr(196)  + Chr(196) + CHr(196)
oMybrowser:ColSep   :=Space(01) + Chr(179) + Space(01)

// oMybrowser:gobottomblock={||aindex:=LEN(VETOR[1])}
oMybrowser:gobottomblock={||aindex:=LEN(VETOR)}
oMybrowser:gotopblock={||aindex:=1}
AR_SKIPBLOCK(oMybrowser,aindex,VETOR)

oMybrowser:ColorSpec:='N/GB'

/*
ocolum1:=tbcolumnnew('NUMERO DA NOTA'     ,{|| VETOR[1,aindex] })
ocolum2:=tbcolumnnew('ITEM'               ,{|| VETOR[2,aindex] })
ocolum3:=tbcolumnnew('DATA EMISSAO'       ,{|| VETOR[3,aindex] })
ocolum4:=tbcolumnnew('NOME FORNECEDOR'    ,{|| VQFRON(VETOR[4,aindex]) })
*/
ocolum1:=tbcolumnnew('NUMERO DA NOTA'     ,{|| VETOR[aindex,1] })
ocolum2:=tbcolumnnew('ITEM'               ,{|| VETOR[aindex,2] })
ocolum3:=tbcolumnnew('DATA EMISSAO'       ,{|| VETOR[aindex,3] })
ocolum4:=tbcolumnnew('NOME FORNECEDOR'    ,{|| VQFRON(VETOR[aindex,4]) })
oMybrowser:addcolumn(ocolum1)
oMybrowser:addcolumn(ocolum2)
oMybrowser:addcolumn(ocolum3)
oMybrowser:addcolumn(ocolum4)
oMybrowser:freeze:=2
do while .t.
   do while(! oMybrowser:stabilize())
   enddo
   if oMybrowser:stable
      if oMybrowser:hitTop()
         @20,60 say" INICIO " color('r/gb')
      Elseif oMybrowser:hitBottom()
         @20,60 say"  FIM   " color('R/gb')
      else
         @20,60 say "ÄÄÄÄÄÄÄÄÄÄÄÄ"
      endif
   endif
   nkey:=inkey(0)
   if 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
      // Voce tinha dito que precisava editar a tabela com vetores
      // Claro que quando digo EDITAR significa que ir  alterar e gravar
      SET CURSOR ON
      DO CASE
         CASE (oMybrowser:COLPOS)=1
              VCOL:=8
              VLIN:=(oMybrowser:RowPos())+8

              // VCAMP:=VETOR[1,AINDEX]
              VCAMP:=VETOR[AINDEX,1]
              @ VLIN,VCOL GET VCAMP PICT "@9"
              READ
              IF !LASTKEY()=27
                 // VETOR[1,AINDEX]:=VCAMP
                 VETOR[AINDEX,1]:=VCAMP
              ENDIF
         CASE (oMybrowser:COLPOS)=2
              VCOL:=22
              VLIN:=(oMybrowser:RowPos())+8

              // VCAMP:=VETOR[2,AINDEX]
              VCAMP:=VETOR[AINDEX,2]
              @ VLIN,VCOL GET VCAMP PICT "@9"
              READ
              IF !LASTKEY()=27
                 // VETOR[2,AINDEX]:=VCAMP
                 VETOR[AINDEX,2]:=VCAMP
              ENDIF
         CASE (oMybrowser:COLPOS)=3
              VCOL:=29
              VLIN:=(oMybrowser:RowPos())+8

              // VCAMP:=VETOR[3,AINDEX]
              VCAMP:=VETOR[AINDEX,3]
              @ VLIN,VCOL GET VCAMP PICT "@D"
              READ
              IF !LASTKEY()=27
                 // VETOR[3,AINDEX]:=VCAMP
                 VETOR[AINDEX,3]:=VCAMP
              ENDIF
         CASE (oMybrowser:COLPOS)=4
              VCOL:=44

              VLIN:=(oMybrowser:RowPos())+8
              VFORN:={ PADR("EDER",15) , PADR("JURANDIR",15) }
              VTELA:=SAVESCREEN(06,40,22,60)
              SET COLOR TO "W+/B,W+/R"
              @ VLIN-1,VCOL-1 TO VLIN+2,VCOL+16
              VOP:=ACHOICE(VLIN,VCOL,VLIN+2,VCOL+15,VFORN)
              setcolor('n/gb')
              RESTSCREEN(06,40,22,60,VTELA)
              IF !LASTKEY()=27
                 // VETOR[4,AINDEX]:=VOP
                 VETOR[AINDEX,4]:=VOP
              ENDIF
      ENDCASE
      SET CURSOR OFF

      oMybrowser:Right()
      oMybrowser:refreshCurrent()
   elseif nkey == K_ESC
     EXIT
   endif
ENDDO
RETURN VETOR

FUNCTION VQFRON(VFORN)
// Nao sei se voce tem tabela de FORN, mas como voce mandou assim simples
// fiz uma tabelinha interna
DO CASE
   CASE VFORN=1
        VRET:=PADR("EDER",30)
   CASE VFORN=2
        VRET:=PADR("JURANDIR",30)
   OTHERWISE
        VRET:=PADR("DESCONHECIDO",30)
ENDCASE
RETURN VRET
Viu ? Eder, não ficou difcil de entender, não é mesmo ?. Se você ainda tiver dúvida, pergunta aqui que explicaremos pra ti. Beleza ?

Um clip-abraço :)Pos
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

Pablo , é isso mesmo , chamei o DBedit() de dentro do Tbrowse() , pois nesse Dbedit() apenas iria mostrar um campo do *.DBF com todo seu conteudo , isso serviu-me para alterar o nome do fornecedor .. logo mais lhe mandarei um exemplo da minha "salada " para que voce veja como esta ficando a criança hehehee, e valeu por postar esse codigo té++ :|<
C:\Xharbour\Xdev\Fw\VSX
Eliane
Usuário Nível 2
Usuário Nível 2
Mensagens: 82
Registrado em: 22 Mai 2006 10:17
Localização: Londrina-PR

Mensagem por Eliane »

Eder, estou terminando de testar uns programas como TBROWSES encadeados ( um tbrowse chamando outro e retornando).

É mais ou menos assim: De dentro de um tbrowse (ordens de serviço) abro outro tbrowse (grupos) e dentro desse posso incluir,alterar,pesquisar,etc), depois retorno a ordens de serviço e continuo normalmente.

Caso interesse, mandarei em seu e-mail.
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 »

Eliane escreveu:estou terminando de testar uns programas como TBROWSES encadeados ( um tbrowse chamando outro e retornando)
Pois é, Eliane. Era isso que eu mencionava para o Eder, mas ele disse que fez com DBEDIT eaghhh Imagem

Mas Eliane, posta pra gente ver, vai.... Com certeza será de ajuda para muitos aqui no FORUM.

Vai... poste...aqui... vai.... Imagem
Responder