Incluir direto no tbrowse

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Machado_s
Usuário Nível 1
Usuário Nível 1
Mensagens: 48
Registrado em: 21 Out 2003 19:58
Localização: Belém-Pá

Incluir direto no tbrowse

Mensagem por Machado_s »

Bom Tarde a todos os irmãos.
Gostaria de saber se alguem aqui já tentou inserir dado direto do tbrowse, tipo assim; pressionando um tecla determinada ele permitirá inserir os dados dentro do tbrowse, abrindo um linha para a digitação. Já conseguir parte dela, só q quando volto ela retorna para o registro anterior.
Alguém pode me ajudar? Agradeceria m+.

Obrigado!!
Machado_s
dilsonmachado@hotmail.com.br


Segue abaixo minha rotina.
FUNCTION Incluir_()
LOCAL l_1:=5, c_1:=2, l_2:=22, c_2:=78, oTela:= SaveTela(0,0,24,79), mTela, n_item:={}

SETCOLOR(drvcorget)
MOLDURA(l_1,c_1,l_2,c_2)
@ l_1, c_1+2 Say " INCLUSŽO " COLOR(drvtitget)
@ l_1+1, c_1+2 Say "N£mero =[ ] Data da Solicita‡„o =[ / / ]"
@ l_1+2, c_1+2 Say "Setor =[ - ] Empresa =[ ] Req.=[ ]"
mTela:= SaveTela(l_1,c_1,l_2,c_2)

SETCURSOR(1)
WHIL TRUE

SELE SOLICITO
M->numero:= PsqContrl(DBF())
M->setor:= M->empress:= 0
M->data:= DATAc
M->emp:= SPAC(1)
M->requis:= usuario
SETCOLOR(drvcorget+","+drvtitmsg+",,,"+drvtitget)
SetKey(K_F3,{||PegaVar(ReadVar())})
@ l_1+1, c_1+11 Get M->numero PICT "@K 99999"
Dre()
If LASTKEY() == K_ESC
EXIT
Endi

Nub:= 1
SELE ITE
DBSeek(STR(M->numero,5))

IF !FOUND()
SETCOLOR(drvcorget+","+drvtitmsg+",,,"+drvtitget)
@ l_1+1, c_1+65 Get M->data PICT "@D" VALID M->data=DATAc
@ l_1+2, c_1+11 Get M->setor PICT "@K 99" VALID PsqSet(l_1+2,c_1+15) WHEN ShowT(0)
@ l_1+2, c_1+42 Get M->emp PICT "@!" VALID PsqEmp(l_1+2,c_1+42) WHEN ShowT(1)
@ l_1+2, c_1+65 Say M->requis PICT "@!" COLOR(drvtitmsg)
Dre()
If LASTKEY() == K_ESC
EXIT
Endi
ENDI

Camp_db:= {'item','descricao','unid','qtd'}
Tit_db := {' ITEM','DESCRICAO DO ITEM','UNI','QTD.'}
Pit_db := {'99999','@!','!!!','9999'}
Lag_db := {5,40,3,4}
Chav_ := 'STR(M->numero,5)'

CriaTbr(l_1+3,c_1+1,l_2-1,c_2-1,Camp_db,Tit_db,Pit_db,Lag_db,Chav_) // esta rotina e de um irmão.

RestoreTela (mTela)
ENDD
SETCURSOR(0)
RestoreTela (oTela)
RETURN(.t.)

FUNCTION CriaTbr(Li,Ci,Lf,Cf,aCamp,aTitu,aPict,aLarg,xChave)
Local oTbc
Local i
Local nTecla
Local xRetorno
Local Cor_ant:= SETCOLOR()
Local bRead

oTbr:=TBrowseDb(Li,Ci,Lf,Cf)
oTbr:HeadSep :="ÍÍÍ"
oTbr:ColSep :=" ³ "
oTbr:FootSep :="ÍÍÍ"

SELE ITE
DBGoTop()

FOR i:=1 To Len(aCamp)
oTbc:=TbColumnNew(aTitu,FieldWBlock(aCamp,Select()))
oTbc:Picture:=aPict
oTbc:Width:=aLarg
oTbr:AddColumn(oTbc)
NEXT

If xChave <> Nil

DBSeek(xChave,.F.)
oTbr:GoTopBlock :={||DBSeek(xChave,.F.)}
oTbr:GoBottomBlock:={||Iif(DBSeek(UltiCha(xChave),.F.),DBSkip(-1),DBSkip(0))}
oTbr:SKipBlock :={|nParaMover|MoveReg(nParaMover,xChave)}

oTBr:GoTop()
WHIL (.t.)

SETCURSOR(0)
Whil ( !oTBr:Stabilize () ); endd

If oTBr:Stable
nTecla:= INKEY(0)
Endi

DO Case

Case (nTecla == K_ESC); Exit
Case (nTecla == K_DOWN); oTBr:down()
Case (nTecla == K_UP); oTBr:up()
Case (nTecla == K_LEFT); oTBr:left()
Case (nTecla == K_RIGHT); oTBr:right()
Case (nTecla == K_HOME); oTBr:Home()
Case (nTecla == K_END); oTBr:End()
Case (nTecla == K_PGUP); oTBr:pageup()
Case (nTecla == K_PGDN); oTBr:pagedown()
Case (nTecla == K_CTRL_PGUP); oTBr:gotop()
Case (nTecla == K_CTRL_PGDN); oTBr:gobottom()
Case (nTecla == K_CTRL_HOME); oTBr:PanHome()
Case (nTecla == K_CTRL_END); oTBr:PanEnd()
Case (nTecla == K_CTRL_LEFT); oTBr:PanLeft()
Case (nTecla == K_CTRL_RIGHT); oTBr:PanRight()
Case (nTecla == K_ENTER)
*Case (nTecla == K_ALT_I); i:=.t.; Read_rec(r,i)
Case (nTecla == K_ALT_I); i:=.t.; r:= row();Read_rec(r,i,M->numero)


ENDc
oTBr:RefreshAll()

ENDD

Endi
Return(oTbr)


***********************************************
Static Function read_rec (row,inserting,number)
***********************************************

local old_color,savebottom
local i_item,i_descricao,i_unid,i_qtd
local getlist := {}

savebottom := SaveTela(24,0,24,79)
old_color := SETCOLOR("n/bg")
SETCURSOR(1)

*@ 24, 0
*@ 24, 1 say if(inserting,"Inserting","Editing")
*@ 24,67 say "Esc to Abort"

i_item := ITE->item
i_descricao := ITE->descricao
i_unid := ITE->unid
i_qtd := ITE->qtd

SETCOLOR(",n/w")
@ row,10 get i_item pict "99999"
@ row,18 get i_descricao pict "@!"
@ row,61 get i_unid pict "!!!"
@ row,68 get i_qtd pict "9999"
Read

SETCOLOR(old_color)

RestoreTela(savebottom)

if lastkey()=K_ESC
return .f.
endif

If inserting
if !Tpad_Reg()
return .f.
endif
Elseif !RLOCK()
return .f.
Endif
ITE->n_sol := number
ITE->item := i_item
ITE->descricao := i_descricao
ITE->unid := i_unid
ITE->qtd := i_qtd
dbUNLOCK()

if inserting
Keyboard chr(1)
endif
SETCURSOR(0)
Return .t.


FUNCTION Tpad_Reg()
If !NetErr()
dbAPPEND()
Return(.t.)
Else
Return(.f.)
Endi


"Há três coisas que nunca voltam atrás: a flecha lançada, a palavra pronunciada e a oportunidade perdida". (Provérbio chinês)

Utilizando: Clipper 5.2e Blinker 7.0 Med
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Mensagem por MARCELOG »

Caro Machado_S,

pelo que sei não é possível inserir dados direto no Tbrowse.

Na realidade, o objeto Tbrowse nada mais é que uma forma inteligente de visualizar (pesquisar) a fonte de dados, seja ela arquivo, array, variável, etc.

Assim, por exemplo, você cria um Tbrowse e suas variáveis para visualizar determinado dbf.

As colunas e linhas têm como "saber" a referência do objeto mostrado.

Logo, a sua rotina de incluir deve considerar a inclusão no dbf.

Você cria um novo registro e posiciona o cursor sobre ele, daí é so editar diretamente o campo ou criar uma tela para fazê-lo. (Apesar de possível, considere a fonte de dados (dbf) para fazer isso e não o objeto Tbrowse...Block)

Na instalação do CLIPPER, no diretório SOURCE, são criados exemplos de como editar diretamente no objeto.

VEJA É INTERESSANTE.

Na realidade, você edita a variável que tem relação com a fonte de dados que é atualizada.

Espero ter contribuído.

mgs
gavel
Usuário Nível 1
Usuário Nível 1
Mensagens: 39
Registrado em: 16 Mar 2005 07:30

EDITAR DENTRO DO TBROWSE

Mensagem por gavel »

Tenho um sistema que faz LIVRO CAIXA EXATAMENTE COMO O LIVRO e com a flexibilidade de você controlar tudinho COM MOUSE E TUDO diretamente na linha do BROWSE :))

se alguém se interessar ente em contato. Pessoal. Aqui somosa todos solidários. Tem aqueles que têm uma estrutura melhor que outros e eu como sou um humilde discípulo da vida, um parasita da terra mãe, tive um imenso trabalho para colocar isso na LIB VL2 52. por tanto acho justo ter pelo menos uma gratificação pelo meu esforço.

Aguardo contato.

gavel diz: A gratidão é dos humildes e grandiosos são aqueles que a recebem. ( provérbio Gavelês )
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Mensagem por Hasse »

Aló amigos.

Não é difícil...

De dentro do TBrowse crie uma função, que deve ser chamada por uma tecla de atalho, para inserir um registro em branco. Ao final desta incluir a instrução para que o TBrowse atualize os dados na tela.

A seguir os campos do registro em branco podem ser editados. Esta função pode ser colocada na mesma função que inseriu o registro em branco, como também pode ser colocada numa outra função que é chamada numa segunda etapa. Não esquecer de mandar atualizar os dados na tela.

Os campos também podem ser editados um a um, sempre aquele onde estivar a janela ativa.

Se isto não ficou claro, favor informar...

Hasse.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Responder