Página 1 de 4

Posicionamento DBEdit ... ? << RESOLVIDO >>

Enviado: 29 Jun 2007 06:20
por fladimir
Olá nobres colegas... como vão... recorro novamente ao conhecimento mútuo para enrequecimento dos membros do fórum....

Seguinte migrei o sistema de Clipper5.2 para xHarbour com a ajuda das informações aki do fórum... estou testando o mesmo para ver se ele esta rodando perfeitamente assim como roda no Clipper....

Durante os testes percebi que tem uma determinada função que utilizao DBEDIT e ela esta funcionando, mas de forma diferente do Clipper...

É criado um Dbedit da seguinte maneira:

Código: Selecionar todos

Dbedit(05,05,20,75,vetor1,"planilha",cPicts,cNomes,chr(196),"  ")
Onde o usuário vai digitando os itens conforme as colunas, acontece q no clipper após confirmado a útima coluna ele ia para a linha debaixo, agora isso só ocorre após o primeiro item no segundo ele vai diretamente para o primeiro ou seja ai o usuário tem que pressionar a Seta para baixo para ir para o posterior ao último item para poder preencher. Antes estava certo no clipper e agora no xHarbour esta apresentando esse porém. Salientando que durante a migração não foi mexido em uma linha sobre isto.

Alguém sabe se no xHarbour o DbEdit tem alguma particulariedade ?


Obrigado
:)Pos

Enviado: 29 Jun 2007 11:29
por sygecom
Tche, tive alguns problema no inicio com o DBEDIT(), passei a usar tudo com o TBRWSE....e acabou os problemas...

Qual versão do xharbour vc esta usando ?

Abraços
Leonardo Machado

Enviado: 29 Jun 2007 14:25
por fladimir
Estou utilizando o xHarbour 0.99.71 Simplex

Caso alguém possa contribuir....

No Caso do Tbrowse sei q tem muitos tópicos sobre o mesmo mas alguém possui alguma rotina simples de exemplo sobre tipo uma rotina de venda em q vai se acrescentando os produtos, quantidade, valor unitario ele calcula o total.... tipo frente de caixa pois a minha esta no DbEdit e se for o caso terei que mudar....


Pois a minha utilizo em vários clientes com Leitores de código de barras ele já preenche com o produto cai na coluna quantidade q já tem 1 por default e pode-se alterar para mais itens, depois ao pressionar ENTER ele já faz o calculo qtd x vlr unit = vlr total e cai para linha de baixo aguardando o próximo produto ou finalizar a venda... A questão esta ai no clipper estava ok agora no xHarbour a mesma função ao invés de ir para linha de baixo e ficar aguardando ele fica na primeira linha em cima do primeiro produto, ou seja, se vc passar o leitor ele substitui o primeiro produto por outro, sendo q teria q ser na ultima linha em branco para ir acrescentando mais itens.

Já tentei colocar

Código: Selecionar todos

KEYBOARD CHR(K_CTRL_PGDN)
para ir para o final e nada....

[/b]



Grato :)Pos

Enviado: 29 Jun 2007 14:32
por sygecom
No Caso do Tbrowse sei q tem muitos tópicos sobre o mesmo mas alguém possui alguma rotina simples de exemplo sobre tipo uma rotina de venda em q vai se acrescentando os produtos, quantidade, valor unitario ele calcula o total.... tipo frente de caixa pois a minha esta no DbEdit e se for o caso terei que mudar....
Tche, de uma olahda no link abaixo tenho um exemplo de como usar o TBROWSE.
http://www.sygecom.com.br/xharbour/tbro ... linker.zip

Tche, post para nos ver a sua função planilha, talvez agente posso resolver isso por ai mesmo !!

Abraços
Leonardo Machado

Enviado: 29 Jun 2007 15:45
por fladimir
Olá colegas... analisando achei algo q pode ter sentido... no clipper no dbedit se pressiono a SETA para baixo ele permanece na última linha... mas no xHarbour ele fica fazendo um tipo Loop.. chega no final vai pro inicio e se faço ao contrario tipo pressiono SETA pra cima ele vai indo até chegar na primeira linha e depois vai para Última...

:)Pos

Enviado: 29 Jun 2007 16:14
por sygecom
Olá colegas... analisando achei algo q pode ter sentido... no clipper no dbedit se pressiono a SETA para baixo ele permanece na última linha... mas no xHarbour ele fica fazendo um tipo Loop.. chega no final vai pro inicio e se faço ao contrario tipo pressiono SETA pra cima ele vai indo até chegar na primeira linha e depois vai para Última..
Nossssaaa....que DBEDIT() maluco.....relamente nunca percebi isso que vc falou...pelo menos comigo isso não acontece....

Abraços
Leonardo Machado

Enviado: 30 Jun 2007 04:42
por fladimir
Pessoal parece que descobri o problema... analisem comigo...

Aparentemente o problema esta no seguinte comando:

Código: Selecionar todos

KEYBOARD CHR(K_CTRL_PGDN)
Pq digo isto qdo ele chega no final da linha eu dou um comando para adicionar mais um registro no Banco de Dados e posteriormente

Código: Selecionar todos

Dados->(DBGOTOP()) 
E depois executo o comando

Código: Selecionar todos

KEYBOARD CHR(K_CTRL_PGDN)
Eu faço isto para ficar aparecendo no DBEDIT os produtos q foram sendo colocados na planilha ex:

Código: Selecionar todos

COD  PRODUTO           QUANTIDADE   UNIT      TOTAL
 1   TESTE 1                  10    2,50      25,00
 2   TESTE 2                   4    2,50      10,00
 3   TESTE 3                   2    2,50       5,00
 4   TESTE 4                   1    2,50       2,50
 5   TESTE 5                   5    2,00      10,00
Coloquei o trecho acima como código para ficar mais destacado e alinhado corretamente, pq como texto puro, não tinha conseguido, mas deve-se considerar a parte acima como se fosse o DBEdit rodando...

Pq se eu não colocar o KEYBOARD CHR(K_CTRL_PGDN) após o DBGOTOP() ele fica na primeira linha (que é o motivo do tópico) e o Cliente tem q ir manualmente para o final para poder lançar outro... e se eu deixar sem o DBGOTOP() ele fica sempre no final ai não vejo para cima, tendo que se eu quiser ver os produtos q foram lançados ir manualmente na SETA para cima ou CTRL PGUP....

Resumindo o Comando q no Clipper rodava certo agora ele não da erro mas é como se não executasse... Ah... eu tentei HB_KEYPUT(K_CTRL_PGDN) tb não funciona...

Eis ai o mistério....

Grato...
:)Pos

Enviado: 30 Jun 2007 20:15
por fladimir
E aí nobres gurus... ninguém nunca passou por algo semelhante...? Ou sabe como contornar tal problema ?

:'( Obrigado, Muchas Gracias, Thank You, Guten Tag, Arigatou Gozaimasu, Mêr-ci....

Enviado: 01 Jul 2007 11:36
por esbasso
SÓ SEI DE UMA COISA. O Dbedit do XHARBOUR é m,uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiito mais lennnnnnnnnnnnnnnnnnnnto que no clipper. Ele parece que fica executando coisaS de modo repetido até estabilizar. Em computadores mais lentos então ele chega a trava o computador quando voce pressiuona a tecla para baixo. ESTOU FALANDO ISSO EM REDE.

tenti de tudo para normalizar mas não consegui.

:|

Enviado: 01 Jul 2007 16:47
por alberto_dias
Prezado Fladimir....
Sofri e ainda sofro com os problemas do Dbedit no xHarbour....
Migreia a pouco tempo o sistema inteiro para xHarbour + gtvwv, e um dos primeiros problemas foram o dbedit....
Voce mensionou que nao mudou nada, estranho pois no comando dbedit em xHarbour eu tive que mudar um pouco, pois a "posicao" dos campos eh
um pouquinho diferente, na posicao que estavam com o clipper ele ficava muito estranho o comportamento, e em alguns casos nao funcionava direito.
Nao concordo com a afirmacao que eh fica lento...no meu ficou mais rapido. Soh nao troquei para tbrowse ainda !, pois no dbedit conforme o cliente vai digitando as letras, o sistema vai se posicionando onde ele quer chegar, sem precisar gastar muito tempo na digitacao, e eu nao encontrei um exemplo como este no tbrowse, por enquanto, sera que existe ?.
Alguem teria um exemplo de tbrowse, por exemplo de uma pesquisa em ordem alfabetica onde o cliente digitando algumas letras o sistema vai se posicionando ?.
Obrigado

Enviado: 01 Jul 2007 17:20
por sygecom
fladimir escreveu:E aí nobres gurus... ninguém nunca passou por algo semelhante...? Ou sabe como contornar tal problema ?

:'( Obrigado, Muchas Gracias, Thank You, Guten Tag, Arigatou Gozaimasu, Mêr-ci....
Tche, se vc postar o seu codigo, para nos ver como vc usa podemos lhe ajudar....
alberto_dias escreveu:Alguem teria um exemplo de tbrowse, por exemplo de uma pesquisa em ordem alfabetica onde o cliente digitando algumas letras o sistema vai se posicionando ?.
Post o exemplo completo que vc usa no DBEDIT() que eu adapto para vc usar no TBROWSE().....

Abraços
Leonardo Machado

Enviado: 01 Jul 2007 20:03
por alberto_dias
Para Sygecom...
Abaixo postei um codigo simples de pesquisa de impressoras que
quanto o OPERADOR comeca a digitar o sistema vai se posicionando
no nome da impressora, espero que seja suficiente para demonstracao.
Espero que consiga transferir para Tbrowse.
Agradeco desde ja a sua colaboracao,
Obrigado...
ALBERTO DIAS
***********************************************
* Funcao para pesquisar as impressoras com a tecla F2

Código: Selecionar todos

FUNCTION Pesimp
   PRIVATE telant,corant,poscur,letpes
   SETTEC(-1,"")
   SAVE SCREEN TO telant
   corant = SETCOLOR()
   poscur = 179
   letpes = ""
   Linsta("  Marcas/Modelos de Impressoras  ")
   Linmen("Digite as iniciais ou use as setas para escolher...")
   Lin24("["+CHR(25)+" "+CHR(24)+"]-Visualiza ² [Enter]-Escolhe ² [<ÄÄ]-Apaga ² [Esc]-Cancela Pesquisa")
   DECLARE CAMPO[1],NOME[1]

   SELECT dim
   GO TOP
   CAMPO[1] = "' '+nomimp+' '+CHR(poscur)+IF(modimp='M',' MATRICIAL    ',' JATO DE TINTA')+' '"
   NOME[1] = " MARCA/MODELO DA IMPRESSORA     ³ TIPO IMPRESSÇO"
   Boxsom(04,29,21,78,"U",Somenu,"IE")
   SETCOLOR(comenu)
   * ALTERADO PARA 32 BITS XHARBOUR POR INCOMPATIBILIDADE DO CLIPPER 5.3B
   * DBEDIT(05,30,20,77,CAMPO,"UDFPESIMP",.T.,NOME,"Ä")
   DBEDIT(05,30,20,77,CAMPO,"UDFPESIMP",,NOME,"Ä",,,)

   SETTEC(-1,"Pesimp")
   SETCOLOR(corant)
   RESTORE SCREEN FROM telant
RETURN(.T.)

FUNCTION Udfpesimp
   PARAMETERS MODE,CAMPO
   @ 04,62 SAY "Â"
   @ 06,62 SAY "Å"
   @ 06,78 SAY "´"
   @ 07,62 TO 20,62
   @ 21,62 SAY "Á"
   @ 06,29 SAY "Ã"
   DO CASE
      CASE MODE = 0             && No meio do arquivo
           poscur = 18

      CASE MODE = 1             && Inicio do arquivo
           poscur = 25
           Beep(4)

      CASE MODE = 2             && Final do arquivo
           poscur = 24
           Beep(4)

      CASE MODE = 4
           DO CASE
              CASE LASTKEY() = 27    && Foi teclado [Esc]
                   flgimp = .F.
                   RETURN(0)

              CASE LASTKEY() = 13    && Foi teclado [Enter]
                   flgimp = .T.
                   KEYBOARD CHR(13)
                   RETURN(0)

              CASE LASTKEY() = 8     && Foi teclado [<--]
                   ccd = LEN(ALLTRIM(letpes)) - 1
                   letpes = SUBSTR(letpes,1,ccd)
                   SETCOLOR(corpes)
                   @ 04,31 SAY SPACE(30)
                   @ 04,31 SAY letpes PICT "@!"
                   SETCOLOR(comenu)
                   SET SOFTSEEK ON
                   SEEK UPPER(letpes)
                   SET SOFTSEEK OFF

              OTHERWISE
                   letpes = letpes+CHR(LASTKEY())
                   SETCOLOR(corpes)
                   IF LEN(letpes) = 1
                      @ 04,31 SAY SPACE(30)
                   ENDIF
                   @ 04,31 SAY letpes PICT "@!"
                   SETCOLOR(comenu)
                   SET SOFTSEEK ON
                   SEEK UPPER(letpes)
                   SET SOFTSEEK OFF
           ENDCASE
   ENDCASE
RETURN(1)

Enviado: 02 Jul 2007 03:16
por fladimir
Leonardo escreveu:
Tche, se vc postar o seu codigo, para nos ver como vc usa podemos lhe ajudar....
Bom a rotina em si é muito grande cerca de 3000 linhas, então reduzi ao máximo para exemplificar o problema, continua dando as "esquisitices" e da para entender a lógica:

Código: Selecionar todos

#include "common.ch"
#include "inkey.ch"

FUNCTION MAIN()

REQUEST DBFCDX
RDDSETDEFAULT('DBFCDX')

CLS

USE PLANILHA alias FILETEMP new exclusive
zap
APPEND BLANK
FILETEMP->( DBGOTOP() )
DBSELECTAR("FILETEMP")

PRIVATE bCamp[5],bNomes[5],bPict[5],total:=0

bCamp[1]  := "codprod"
bCamp[2]  := "left(descricao,25)"
bCamp[3]  := "quant"
bCamp[4]  := "vendaprod"
bCamp[5]  := "total"

bNomes[1]  := "Codigo"
bNomes[2]  := "   Descricao"
bNomes[3]  := "   Quant"
bNomes[4]  := "Vlr Venda"
bNomes[5]  := "Total Ger"

bPict[1] := "@!"
bPict[2] := "@!"
bPict[3] := "@E 9,999,999"
bPict[4] := "@E 9999.99"
bPict[5] := "@E 99999.99"

@20,20 SAY "Pressione ENTER e Digite o Codigo do Produto"
DBEDIT(05,02,15,76,bCamp,"Analise",bPict,bNomes,"Ä","³","")

RETURN

**********************
FUNCTION Analise(modo)

LOCAL codigo:=SPACE(6),GETLIST:={}
LOCAL qtd:=1,preco:=0
LOCAL posreg:=0, precxquant:=0, cDescricao:=SPACE(40), maisum:=0, numLin:=0


IF SELECT("PRODUTO")=0
   USE Produto alias Produto new shared
   Index on codprod TAG iProdCod TO PRODUTO.CDX
ENDIF

DBSELECTAR("FILETEMP")
linha:=ROW()

IF MODO==0 .OR. MODO==1 .OR. MODO==3
	RETURN 1
ELSEIF MODO==2
	LOCATE FOR FILETEMP->codprod == SPACE(06)
	IF FILETEMP->( !FOUND() )
      APPEND BLANK
	ENDIF
	FILETEMP->( DBGOTOP() )
	KEYBOARD  K_CTRL_PGDN
	RETURN 1
ELSEIF MODO==4
  IF LASTKEY()!=K_ESC
	  linha  := ROW()
	  numLin:=ROW()

	  Produto->( ORDSETFOCUS(1) )
	  codigo  := FILETEMP->codprod
	  @ numLin,08 GET codigo pict "999999" color",r/w"
	  READ
	  Produto->( ORDSETFOCUS(1) )
	  IF Produto->( !DBSEEK( STRZERO(VAL(codigo),6 )) )
		  alert("Produto com o codigo "+ALLTRIM(codigo)+" nao localizado")
        RETURN 1
  	  ENDIF
     codigo:=Produto->codprod
	  DBSELECTAR("FILETEMP")
  	  posreg := FILETEMP->( RECNO() )
	  preco:=precod:=Produto->vendaprod
	  @ linha,08 SAY Produto->codprod COLOR "R/W"
	  cDescricao:=Produto->descprod

	  FILETEMP->descprod   := cDescricao
	  FILETEMP->descricao  := left(cDescricao,25)

	  @ linha,15 SAY left(cDescricao,25) COLOR "R/W"
	  @ linha,53 SAY preco PICTURE "@E 9999.99" COLOR "R/W"
     @ linha,41 GET qtd PICTURE "@E 9,999,999" valid qtd>0
     read

	  IF Produto->codprod==FILETEMP->codprod
		  preco:=FILETEMP->vendaprod
	  ENDIF

     precxquant := preco * qtd

	  FILETEMP->codprod   := Produto->codprod
	  FILETEMP->descricao := left(cDescricao,25)
	  FILETEMP->quant     := qtd
	  FILETEMP->vendaprod := preco
	  FILETEMP->total     := precxquant

     maisum:=FILETEMP->( RECNO() )
	  FILETEMP->( DBSKIP() )

	  posreg := FILETEMP->( RECNO() )
	  FILETEMP->( DBGOTO(maisum) )
	  FILETEMP->( DBGOTO(posreg) )

	  IF !EMPTY(FILETEMP->codprod)
		  FILETEMP->( DBGOTOP() )
		  KEYBOARD  K_CTRL_PGDN
		  RETURN 1
	  ENDIF

	  LOCATE FOR FILETEMP->codprod == SPACE(06)
	  IF FILETEMP->( !FOUND() )
        APPEND BLANK
	  ENDIF
	  FILETEMP->( DBGOTOP() )
     RETURN 1
  ELSEIF LASTKEY()=K_ESC
     DBCLOSEALL()
     CLS
     QUIT
  ENDIF
ENDIF
RETURN 1
Se vcs rodarem essa rotina precisarão de 2 arquivos cuja estrutura segue abaixo:

PRODUTO.DBF
CODPROD C 6
DESCPROD C 40
VENDAPROD N 12 2

================

PLANILHA.DBF
CODPROD C 6
DESCPROD C 40
DESCRICAO C 28
QUANT N 9 3
VENDAPROD N 10 2
TOTAL N 10 2

==================

No Produto.DBF é onde estão cadastrados os produtos para preenchimento da Planilha.DBF q fica vazia esperando os dados....

Ao rodarem a rotina verão q ocorre os problemas q foram descritos desde o iníco do Tópico.

Alberto Dias escreveu:
Alguem teria um exemplo de tbrowse, por exemplo de uma pesquisa em ordem alfabetica onde o cliente digitando algumas letras o sistema vai se posicionando ?.
Sim colega tenho uma rotina q fiz com o Tbrowse para isto vou achar aki e te mando no teu e-mail... blz

Grato!

:)Pos

Enviado: 02 Jul 2007 21:41
por alberto_dias
Prezado Fladimir
Modifiquei o seu codigo.
Estou enviando com algumas alteracoes.
Espero ter ajudado.
Segue abaixo:

Código: Selecionar todos

// /////////////////////////////////////////////////////////////
// 02/07/2007                                                 //
// ORIGINAL ESCRITO POR FLADIMIR ( PCTOLEDO )                 //
// COMPILADO EM XHARBOUR 0.99.70 ( SIMPLEX ) + BORLAND 5.5.1  //
// BRMAKE 2.05                                                //
// /////////////////////////////////////////////////////////////

#include "common.ch" 
#include "inkey.ch" 

FUNCTION MAIN() 

REQUEST DBFCDX 
RDDSETDEFAULT('DBFCDX') 

CLS 

USE PLANILHA alias FILETEMP new exclusive 
zap 
APPEND BLANK 
FILETEMP->( DBGOTOP() )
DBSELECTAR("FILETEMP")

PRIVATE bCamp[5],bNomes[5],bPict[5],total:=0 

bCamp[1]  := "codprod" 
bCamp[2]  := "left(descricao,25)" 
bCamp[3]  := "quant" 
bCamp[4]  := "vendaprod" 
bCamp[5]  := "total" 

bNomes[1]  := "Codigo" 
bNomes[2]  := "   Descricao" 
bNomes[3]  := "   Quant" 
bNomes[4]  := "Vlr Venda" 
bNomes[5]  := "Total Ger" 

bPict[1] := "@!" 
bPict[2] := "@!" 
bPict[3] := "@E 9,999,999" 
bPict[4] := "@E 9999.99" 
bPict[5] := "@E 99999.99" 

@20,20 SAY "Pressione ENTER e Digite o Codigo do Produto" 
DBEDIT(05,02,15,76,bCamp,"Analise",bpict,bNomes,"Ä","|","")

RETURN 

********************** 
FUNCTION Analise(modo) 

LOCAL codigo:=SPACE(6),GETLIST:={} 
LOCAL qtd:=1,preco:=0 
LOCAL posreg:=0, precxquant:=0, cDescricao:=SPACE(40), maisum:=0, numLin:=0 


IF SELECT("PRODUTO")=0 
   USE Produto alias Produto new shared 
   Index on codprod TAG iProdCod TO PRODUTO.CDX 
ENDIF 

DBSELECTAR("FILETEMP") 
linha:=ROW() 

IF MODO==0 .OR. MODO==1 .OR. MODO==3 
   RETURN 1 
ELSEIF MODO==2 
   LOCATE FOR FILETEMP->codprod == SPACE(06) 
   IF FILETEMP->( !FOUND() ) 
      APPEND BLANK 
   ENDIF 
   FILETEMP->( DBGOTOP() )
   KEYBOARD  K_CTRL_PGDN
   RETURN 1
ELSEIF MODO==4 
  IF LASTKEY()!=K_ESC 
     linha  := ROW() 
     numLin:=ROW() 

     Produto->( ORDSETFOCUS(1) ) 
     codigo  := FILETEMP->codprod 
     @ numLin,08 GET codigo pict "999999" color",r/w" 
     READ 
     Produto->( ORDSETFOCUS(1) ) 
     IF Produto->( !DBSEEK( STRZERO(VAL(codigo),6 )) ) 
        alert("Produto com o codigo "+ALLTRIM(codigo)+" nao localizado") 
        RETURN 1 
       ENDIF 
     codigo:=Produto->codprod 
     DBSELECTAR("FILETEMP") 
       posreg := FILETEMP->( RECNO() ) 
     preco:=precod:=Produto->vendaprod 
     @ linha,08 SAY Produto->codprod COLOR "R/W" 
     cDescricao:=Produto->descprod 

     FILETEMP->descprod   := cDescricao 
     FILETEMP->descricao  := left(cDescricao,25) 

     @ linha,15 SAY left(cDescricao,25) COLOR "R/W" 
     @ linha,53 SAY preco PICTURE "@E 9999.99" COLOR "R/W" 
     @ linha,41 GET qtd PICTURE "@E 9,999,999" valid qtd>0 
     read 

     IF Produto->codprod==FILETEMP->codprod 
        preco:=FILETEMP->vendaprod 
     ENDIF 

     precxquant := preco * qtd 

     FILETEMP->codprod   := Produto->codprod 
     FILETEMP->descricao := left(cDescricao,25) 
     FILETEMP->quant     := qtd 
     FILETEMP->vendaprod := preco 
     FILETEMP->total     := precxquant 

     maisum:=FILETEMP->( RECNO() ) 

     // 02/07/2007
     // OBJETIVO-> MANTER SEMPRE UM REGISTRO AO FINAL NA TELA PARA DIGITACAO
     IF maisum > 8
        SKIP 2
     ENDIF

     FILETEMP->( DBSKIP() )

     posreg := FILETEMP->( RECNO() ) 
     FILETEMP->( DBGOTO(maisum) ) 
     FILETEMP->( DBGOTO(posreg) ) 

     IF !EMPTY(FILETEMP->codprod) 
        FILETEMP->( DBGOTOP() )
        KEYBOARD  K_CTRL_PGDN
        RETURN 1
     ENDIF 

     LOCATE FOR FILETEMP->codprod == SPACE(06) 
     IF FILETEMP->( !FOUND() ) 
        APPEND BLANK 
     ENDIF 
     FILETEMP->( DBGOTOP() )

     // 02/07/2007
     // OBJETIVO -> POSICIONAR NO PROXIMO REGISTRO ABAIXO
     // XHARBOUR 32 BITS  X CLIPPER 5.X
     KEYBOARD  K_CTRL_PGDN

     RETURN 1
  ELSEIF LASTKEY()=K_ESC 
     DBCLOSEALL() 
     CLS 
     QUIT 
  ENDIF 
ENDIF 
RETURN 1

:D

Enviado: 03 Jul 2007 00:51
por fladimir
Obrigado Alberto Dias... pela vossa atenção, vou testar e posto os resultados... outra coisa quais as vantagens de se transformar, por exemplo o código fonte acima em Tbrowse, e como proceder ?

Grato... :)Pos Sucesso