Editado por moderador evolver: Por favor quando usar codigos grandes use o botão code pra abrir e fechar senão eu acabo com meu botão de rolagem!
Código: Selecionar todos
#Include "Inkey.ch"
#Include "Visual2.ch"
Request DBFCDX
RddSetDefault("DBFCDX")
DbSetDriver("DBFCDX")
Set Scor Off
Set Dele On
Set Date Brit
Function fCadCli
Local nButton := 1
Local nButton1 := 1
Local nOpcao := 0
Local aEnv := SavEnv(01,00,24,79) //VL-Salva o ambiente
Local aButton := NewButton()
Local nOpcao1 := 0
Local oTbr := TBrowseDB( 04, 04, 19, 74 )
Local oTbc1 := TBColumnNew( "C¢digo" , { || cadcli->Codigo } )
Local oTbc2 := TBColumnNew( "Cliente" , { || cadcli->Cliente } )
Local aWst
Local lExt := .F.
Local DigNome := .T.
Local nInd, nLin, nCol, nTbrLin, nTbrCol
Local MouseESC := .F.
Public cCodigo := Space (05) , cCliente := Space (45) ,;
cConjuge := Space (30) , cCPFCNPJ := Space (19) ,;
cInscEst := Space (20) , cEmail := Space (35) ,;
cFone := Space (15) , cFax := Space (15) ,;
cCelular := Space (15) , cEndereco := Space (30) ,;
cCidade := Space (30) , cBairro := Space (22) ,;
cEstado := Space (02) , cCEP := Space (10) ,;
dDataCad := Date() , cObs1 := Space (60) ,;
cObs2 := Space (60) , cObs3 := Space (60) ,;
cCondicao1 := Space (06) , cForma1 := Space (02)
Frame(02,59,18,79,,,,,"B/W")
AddButton(aButton,04,61,17,"&Incluir" ,"Incluir produto")
AddButton(aButton,07,61,17,"&Alterar" ,"Alterar produto cadastrado")
AddButton(aButton,10,61,17,"&Excluir" ,"Excluir produto cadastrado")
AddButton(aButton,13,61,17,"&Consultar","Pesquisa produto cadastrado")
AddButton(aButton,16,61,17,"&Fechar" ,"Sair dos botäes de comando",.T.)
nOpcao := ProcButton(aButton,1)
DrawFn(07,"Pesquisa")
SetKey(K_F7,{||fPesquisa()})
SetKeyMouse(K_F7,{24,24,48,55})
If nOpcao == 1
Clrted()
SetColor("N/W,N*/W,,,N*/W")
SetCursor(1)
SetKey(K_SH_F10,{||nButton1 := 2,VLKeyboard(Chr(K_ESC)+Chr(K_ENTER))})
SetKeyMouse(K_SH_F10,{08,08,42,57})
Frame(02,00,17,79,"Cadastro de Clientes",2,,,"B/W")
Linbutton2(LB_SHOW,NB_GRAY,15,nButton1,2,"&Salvar","Gravar cliente","&Cancelar","Cancela inclusÆo")
fNovoCli()
@04,02 say "C¢digo...:" Get cCodigo Picture "@!" When DwnMsg("C¢digo do cliente")
@05,45 say "Data Cad.:" Get dDataCad When DwnMsg("Data do cadastro")
Clear Gets
@04,20 say "Cliente....:" Get cCliente Picture "@!" When DwnMsg("Nome do cliente") Valid ! Empty(cCliente)
@05,02 Say "Conjuge..:" Get cConjuge Picture "@!" When DwnMsg("Conjuge do cliente")
@06,02 say "Endere‡o.:" Get cEndereco Picture "@!" When DwnMsg("Endere‡o do cliente")
@06,45 say "Bairro...:" Get cBairro Picture "@!" When DwnMsg("Bairro do cliente")
@07,02 say "Cidade...:" Get cCidade Picture "@!" When DwnMsg("Cidade do cliente")
@07,45 Say "Estado...:" Get cEstado Picture "@!" When DwnMsg("Estado do cliente") Valid ValUF(cEstado)
@07,60 say "CEP...:" Get cCEP Picture "99.999-999" When DwnMsg("CEP da cidade")
@08,02 say "Fone.....:" Get cFone Picture "@!" When DwnMsg("Fone do cliente")
@08,30 say "Fax.:" Get cFax Picture "@!" When DwnMsg("Fax do cliente")
@08,53 say "Celular.:" Get cCelular When DwnMsg("Celular do cliente")
@09,02 say "E-mail...:" Get cEmail Picture "@" When DwnMsg("E-Mail do cliente")
@09,48 say "C.Pag.:" Get cCondicao1 Picture "@!" When DwnMsg("Condi‡Æo de pagamento")
@10,02 say "CPF/CNPJ.:" Get cCPFCNPJ Picture "999.999.999/9999-99" When DwnMsg("CPF ou CNPJ do cliente") Valid ValCNPJCPF(cCPFCNPJ)
@10,34 say "Insc.Est.:" Get cInscEst Picture "@!" When DwnMsg("Inscri‡Æo estadual do cliente") Valid ValInscEst(cEstado,cInscEst)
@10,67 say "F.Pag.:" Get cForma1 Picture "@!" When DwnMsg("Forma de pagamento")
@11,02 say "Observ...:" Get cObs1 Picture "@!" When DwnMsg("Observa‡Æo 1")
@12,13 Get cObs2 Picture "@!" When DwnMsg("Observa‡Æo 2")
@13,13 Get cObs3 Picture "@!" When DwnMsg("Observa‡Æo 3")
Read
Set Key K_SH_F10 To
SetKeyMouse(K_SH_F10,{})
nOpcao1 := Linbutton2(LB_PROC,NB_GRAY,15,nButton1,2,"&Salvar","Gravar cliente","&Cancelar","Cancela inclusÆo")
If nOpcao1 == 1
Use CadCli Alias cadcli Shared New
BloqArq()
cadcli->(DbAppend())
Repla cadcli->Codigo With cCodigo ,;
cadcli->Cliente With cCliente ,;
cadcli->Endereco With cEndereco ,;
cadcli->Conjuge With cConjuge ,;
cadcli->CPFCNPJ With cCPFCNPJ ,;
cadcli->Inscricao With cInscEst ,;
cadcli->Email With cEmail ,;
cadcli->Fone With cFone ,;
cadcli->Celular With cCelular ,;
cadcli->Fax With cFax ,;
cadcli->Cidade With cCidade ,;
cadcli->Bairro With cBairro ,;
cadcli->Estado With cEstado ,;
cadcli->DataCad With dDataCad ,;
cadcli->Conjuge With cConjuge ,;
cadcli->CEP With cCEP ,;
cadcli->Obs1 With cObs1 ,;
cadcli->Obs2 With cObs2 ,;
cadcli->Obs3 With cObs3
Desbloq()
Close cadcli
Else
RstEnv(aEnv)
EndIf
EndIf
If nOpcao == 2
Use CadCli Alias cadcli Shared New
Set Index To CadCli
Set Order To 2
cadcli->(DbGoTop())
If cadcli->(Eof())
Tone(900,5)
nMsgBcoVaz := MsgBox3d1("Banco de dados vazio!")
lExt := .T.
MouseEsc := .F.
DigNome := .F.
Close cadcli
EndIf
If DigNome == .T.
MsgBox3D(,"Digite as letras iniciais (ENTER=Todos)",,"W+/B","B/W")
SetCursor(1)
SetColor("N/W,N*/W,,,N*/W")
cCliente := Space (40)
@12,20 Get cCliente Pict '@!'
Read
nNumDig := Len(AllTrim(cCliente))
Set Order To 2
Locate For AllTrim(cadcli->Cliente) = Subs(cCliente,1,nNumDig)
If cadcli->(Eof()) ; cadcli->(DbGoTop()) ; EndIf
SetCursor(0)
If LastKey() == K_ESC
lExt := .T.
MouseEsc := .F.
Close cadcli
EndIf
EndIf
oTbr:colSep := " ³ "
oTbr:headSep := "Ä"
oTbr:colorSpec := "N*/W,W+/B,R*/W,W+/R"
oTbr:addColumn( oTbc1 )
oTbr:addColumn( oTbc2 )
Win( 03, 03, 20, 75, "Escolha o cliente a ser alterado")
SetColor( "N*/W,W+/B" )
@ 23, 00 SAY PADL( "[Esc] Sa¡da", 80 ) COLOR "R*/W" // sair pelo mouse
@ 23, 01 SAY "[PgUp]" COLOR "R*/W" // PgUp pelo mouse
@ 23, 08 SAY "[PgDn]" COLOR "R*/W" // PgDn pelo mouse
@ 23, 16 SAY "[" + CHR( 24 ) + "]" COLOR "R*/W" // Sobe pelo mouse
@ 23, 20 SAY "[" + CHR( 25 ) + "]" COLOR "R*/W" // Desce pelo mouse
@ 23, 24 SAY "[" + CHR( 27 ) + "]" COLOR "R*/W" // Esq. pelo mouse
@ 23, 28 SAY "[" + CHR( 26 ) + "]" COLOR "R*/W" // Dir. pelo mouse
WHILE !lExt
VLMouseOff()
WHILE !oTbr:stabilize() ; END
VLMouseOn()
aWSt := WaitState() // substitui o INKEY()
DO CASE
CASE aWSt:wsType == WAIT_KEYPRESS // o evento foi uma tecla
DO CASE // manipula‡Æo padrÆo de teclas
CASE aWst:wsKey == K_DOWN ; oTbr:down()
CASE aWst:wsKey == K_UP ; oTbr:up()
CASE aWst:wsKey == K_PGDN ; oTbr:pageDown()
CASE aWst:wsKey == K_PGUP ; oTbr:pageUp()
CASE aWst:wsKey == K_CTRL_PGUP ; oTbr:goTop()
CASE aWst:wsKey == K_CTRL_PGDN ; oTbr:goBottom()
CASE aWst:wsKey == K_RIGHT ; oTbr:right()
CASE aWst:wsKey == K_LEFT ; oTbr:left()
CASE aWst:wsKey == K_HOME ; oTbr:home()
CASE aWst:wsKey == K_END ; oTbr:end()
CASE aWst:wsKey == K_CTRL_LEFT ; oTbr:panLeft()
CASE aWst:wsKey == K_CTRL_RIGHT ; oTbr:panRight()
CASE aWst:wsKey == K_CTRL_HOME ; oTbr:panHome()
CASE aWst:wsKey == K_CTRL_END ; oTbr:panEnd()
Case aWst:wsKey == K_ENTER
cCodigo := cadcli->Codigo
cCliente := cadcli->Cliente
cConjuge := cadcli->Conjuge
cCPFCNPJ := cadcli->CPFCNPJ
cInscEst := cadcli->Inscricao
cEmail := cadcli->Email
cFone := cadcli->Fone
cFax := cadcli->Fax
cCelular := cadcli->Celular
cEndereco := cadcli->Endereco
cCidade := cadcli->Cidade
cBairro := cadcli->Bairro
cEstado := cadcli->Estado
dDataCad := cadcli->DataCad
cCEP := cadcli->CEP
cObs1 := cadcli->Obs1
cObs2 := cadcli->Obs2
cObs3 := cadcli->Obs3
Clrted()
lExt := .T.
MouseESC := .T.
CASE aWst:wsKey == K_ESC
lExt := .T.
Close cadcli
Clrted()
MouseESC := .F.
ENDCASE
// abaixo - evento MOUSEDOWN - o usu rio clicou com o mouse
CASE aWst:wsType == WAIT_MOUSEDOWN .AND. aWst:wsRow == 23 // na linha 23
IF aWst:wsCol >= 68 .AND. aWst:wsCol <= 78 // clicou em "[Esc] Sa¡da"
lExt := .T.
Close cadcli
MouseEsc := .F.
Clrted()
ELSEIF aWst:wsCol >= 01 .AND. aWst:wsCol <= 06 // clicou em "[PgUp]"
oTbr:pageUp()
ELSEIF aWst:wsCol >= 08 .AND. aWst:wsCol <= 13 // clicou em "[PgDn]"
oTbr:pageDown()
ELSEIF aWst:wsCol >= 16 .AND. aWst:wsCol <= 18 // clicou em "Sobe"
oTbr:up()
ELSEIF aWst:wsCol >= 20 .AND. aWst:wsCol <= 22 // clicou em "Desce"
oTbr:down()
ELSEIF aWst:wsCol >= 24 .AND. aWst:wsCol <= 26 // clicou em "Esquerda"
oTbr:left()
ELSEIF aWst:wsCol >= 28 .AND. aWst:wsCol <= 30 // clicou em "Direita"
oTbr:right()
ENDIF
CASE aWSt:wsType == WAIT_MOUSEDOWN .AND.; // c¢digo para habilitar cliques nas c‚lulas do tbrowse
aWSt:wsRow >= 6 .AND. aWSt:wsRow <= 20 .AND.;
aWSt:wsCol >= 3 .AND. aWSt:wsCol <= 75
nLin := aWSt:wsRow
nCol := aWSt:wsCol
nTbrLin := oTbr:rowPos
nTbrCol := oTbr:colPos
oTbr:deHilite()
oTbr:rowPos := nTbrLin + nLin - ROW() // Acerta linha
VLMouseOff()
FOR nInd = oTbr:rightVisible TO oTbr:leftVisible STEP -1
oTbr:colPos := nInd
oTbr:Hilite()
IF COL() - 1 <= nCol
oTbr:Hilite()
EXIT
ENDIF
NEXT
oTbr:refreshCurrent()
VLMouseOn()
ENDCASE
END
If LastKey() != K_ESC .And. MouseESC == .T.
Clrted()
SetColor("N/W,N*/W,,,N*/W")
SetCursor(1)
SetKey(K_SH_F10,{||nButton1 := 2,VLKeyboard(Chr(K_ESC)+Chr(K_ENTER))})
SetKeyMouse(K_SH_F10,{08,08,42,57})
Frame(02,00,17,79,"Altera‡Æo de Clientes",2,,,"B/W")
Linbutton2(LB_SHOW,NB_GRAY,15,nButton1,2,"&Salvar","Gravar altera‡Æo","&Cancelar","Cancela altera‡Æo")
@04,02 say "C¢digo...:" Get cCodigo Picture "@!" When DwnMsg("C¢digo do cliente")
@05,45 say "Data Cad.:" Get dDataCad When DwnMsg("Data do cadastro")
Clear Gets
@04,20 say "Cliente....:" Get cCliente Picture "@!" When DwnMsg("Nome do cliente") Valid ! Empty(cCliente)
@05,02 Say "Conjuge..:" Get cConjuge Picture "@!" When DwnMsg("Conjuge do cliente")
@06,02 say "Endere‡o.:" Get cEndereco Picture "@!" When DwnMsg("Endere‡o do cliente")
@06,45 say "Bairro...:" Get cBairro Picture "@!" When DwnMsg("Bairro do cliente")
@07,02 say "Cidade...:" Get cCidade Picture "@!" When DwnMsg("Cidade do cliente")
@07,45 Say "Estado...:" Get cEstado Picture "@!" When DwnMsg("Estado do cliente") Valid ValUF(cEstado)
@07,60 say "CEP...:" Get cCEP Picture "99.999-999" When DwnMsg("CEP da cidade")
@08,02 say "Fone.....:" Get cFone Picture "@!" When DwnMsg("Fone do cliente")
@08,30 say "Fax.:" Get cFax Picture "@!" When DwnMsg("Fax do cliente")
@08,53 say "Celular.:" Get cCelular When DwnMsg("Celular do cliente")
@09,02 say "E-mail...:" Get cEmail Picture "@" When DwnMsg("E-Mail do cliente")
@10,02 say "CPF/CNPJ.:" Get cCPFCNPJ Picture "999.999.999/9999-99" When DwnMsg("CPF ou CNPJ do cliente") Valid ValCNPJCPF(cCPFCNPJ)
@10,35 say "Insc.Est.:" Get cInscEst Picture "@!" When DwnMsg("Inscri‡Æo estadual do cliente") Valid ValInscEst(cEstado,cInscEst)
@11,02 say "Observ...:" Get cObs1 Picture "@!" When DwnMsg("Observa‡Æo 1")
@12,13 Get cObs2 Picture "@!" When DwnMsg("Observa‡Æo 2")
@13,13 Get cObs3 Picture "@!" When DwnMsg("Observa‡Æo 3")
Read
Set Key K_SH_F10 To
SetKeyMouse(K_SH_F10,{})
nOpcao1 := Linbutton2(LB_PROC,NB_GRAY,15,nButton1,2,"&Salvar","Gravar altera‡Æo","&Cancelar","Cancela altera‡Æo")
If nOpcao1 == 1
BloqReg()
Repla cadcli->Cliente With cCliente ,;
cadcli->Endereco With cEndereco ,;
cadcli->Conjuge With cConjuge ,;
cadcli->CPFCNPJ With cCPFCNPJ ,;
cadcli->Inscricao With cInscEst ,;
cadcli->Email With cEmail ,;
cadcli->Fone With cFone ,;
cadcli->Celular With cCelular ,;
cadcli->Fax With cFax ,;
cadcli->Cidade With cCidade ,;
cadcli->Bairro With cBairro ,;
cadcli->Estado With cEstado ,;
cadcli->Conjuge With cConjuge ,;
cadcli->CEP With cCEP ,;
cadcli->Obs1 With cObs1 ,;
cadcli->Obs2 With cObs2 ,;
cadcli->Obs3 With cObs3
Desbloq()
Close cadcli
Else
Close cadcli
RstEnv(aEnv)
EndIf
EndIf
EndIf
If nOpcao == 3
Use CadCli Alias cadcli Shared New
Set Index To CadCli
Set Order To 2
cadcli->(DbGoTop())
If cadcli->(Eof())
Tone(900,5)
nMsgBcoVaz := MsgBox3d1("Banco de dados vazio!")
lExt := .T.
MouseEsc := .F.
DigNome := .F.
Close cadcli
EndIf
If DigNome == .T.
MsgBox3D(,"Digite as letras iniciais (ENTER=Todos)",,"W+/B","B/W")
SetCursor(1)
SetColor("N/W,N*/W,,,N*/W")
cCliente := Space (40)
@12,20 Get cCliente Pict '@!'
Read
nNumDig := Len(AllTrim(cCliente))
Set Order To 2
Locate For AllTrim(cadcli->Cliente) = Subs(cCliente,1,nNumDig)
If cadcli->(Eof()) ; cadcli->(DbGoTop()) ; EndIf
SetCursor(0)
If LastKey() == K_ESC
lExt := .T.
MouseEsc := .F.
Close cadcli
EndIf
EndIf
oTbr:colSep := " ³ "
oTbr:headSep := "Ä"
oTbr:colorSpec := "N*/W,W+/B,R*/W,W+/R"
oTbr:addColumn( oTbc1 )
oTbr:addColumn( oTbc2 )
Win( 03, 03, 20, 75, "Escolha o cliente a ser exclu¡do")
SetColor( "N*/W,W+/B" )
@ 23, 00 SAY PADL( "[Esc] Sa¡da", 80 ) COLOR "R*/W" // sair pelo mouse
@ 23, 01 SAY "[PgUp]" COLOR "R*/W" // PgUp pelo mouse
@ 23, 08 SAY "[PgDn]" COLOR "R*/W" // PgDn pelo mouse
@ 23, 16 SAY "[" + CHR( 24 ) + "]" COLOR "R*/W" // Sobe pelo mouse
@ 23, 20 SAY "[" + CHR( 25 ) + "]" COLOR "R*/W" // Desce pelo mouse
@ 23, 24 SAY "[" + CHR( 27 ) + "]" COLOR "R*/W" // Esq. pelo mouse
@ 23, 28 SAY "[" + CHR( 26 ) + "]" COLOR "R*/W" // Dir. pelo mouse
WHILE !lExt
VLMouseOff()
WHILE !oTbr:stabilize() ; END
VLMouseOn()
aWSt := WaitState() // substitui o INKEY()
DO CASE
CASE aWSt:wsType == WAIT_KEYPRESS // o evento foi uma tecla
DO CASE // manipula‡Æo padrÆo de teclas
CASE aWst:wsKey == K_DOWN ; oTbr:down()
CASE aWst:wsKey == K_UP ; oTbr:up()
CASE aWst:wsKey == K_PGDN ; oTbr:pageDown()
CASE aWst:wsKey == K_PGUP ; oTbr:pageUp()
CASE aWst:wsKey == K_CTRL_PGUP ; oTbr:goTop()
CASE aWst:wsKey == K_CTRL_PGDN ; oTbr:goBottom()
CASE aWst:wsKey == K_RIGHT ; oTbr:right()
CASE aWst:wsKey == K_LEFT ; oTbr:left()
CASE aWst:wsKey == K_HOME ; oTbr:home()
CASE aWst:wsKey == K_END ; oTbr:end()
CASE aWst:wsKey == K_CTRL_LEFT ; oTbr:panLeft()
CASE aWst:wsKey == K_CTRL_RIGHT ; oTbr:panRight()
CASE aWst:wsKey == K_CTRL_HOME ; oTbr:panHome()
CASE aWst:wsKey == K_CTRL_END ; oTbr:panEnd()
Case aWst:wsKey == K_ENTER
cCodigo := cadcli->Codigo
cCliente := cadcli->Cliente
cConjuge := cadcli->Conjuge
cCPFCNPJ := cadcli->CPFCNPJ
cInscEst := cadcli->Inscricao
cEmail := cadcli->Email
cFone := cadcli->Fone
cFax := cadcli->Fax
cCelular := cadcli->Celular
cEndereco := cadcli->Endereco
cCidade := cadcli->Cidade
cBairro := cadcli->Bairro
cEstado := cadcli->Estado
dDataCad := cadcli->DataCad
cCEP := cadcli->CEP
cObs1 := cadcli->Obs1
cObs2 := cadcli->Obs2
cObs3 := cadcli->Obs3
Clrted()
lExt := .T.
MouseESC := .T.
CASE aWst:wsKey == K_ESC
lExt := .T.
Close cadcli
Clrted()
MouseESC := .F.
ENDCASE
// abaixo - evento MOUSEDOWN - o usu rio clicou com o mouse
CASE aWst:wsType == WAIT_MOUSEDOWN .AND. aWst:wsRow == 23 // na linha 23
IF aWst:wsCol >= 68 .AND. aWst:wsCol <= 78 // clicou em "[Esc] Sa¡da"
lExt := .T.
Close cadcli
MouseEsc := .F.
Clrted()
ELSEIF aWst:wsCol >= 01 .AND. aWst:wsCol <= 06 // clicou em "[PgUp]"
oTbr:pageUp()
ELSEIF aWst:wsCol >= 08 .AND. aWst:wsCol <= 13 // clicou em "[PgDn]"
oTbr:pageDown()
ELSEIF aWst:wsCol >= 16 .AND. aWst:wsCol <= 18 // clicou em "Sobe"
oTbr:up()
ELSEIF aWst:wsCol >= 20 .AND. aWst:wsCol <= 22 // clicou em "Desce"
oTbr:down()
ELSEIF aWst:wsCol >= 24 .AND. aWst:wsCol <= 26 // clicou em "Esquerda"
oTbr:left()
ELSEIF aWst:wsCol >= 28 .AND. aWst:wsCol <= 30 // clicou em "Direita"
oTbr:right()
ENDIF
CASE aWSt:wsType == WAIT_MOUSEDOWN .AND.; // c¢digo para habilitar cliques nas c‚lulas do tbrowse
aWSt:wsRow >= 6 .AND. aWSt:wsRow <= 20 .AND.;
aWSt:wsCol >= 3 .AND. aWSt:wsCol <= 75
nLin := aWSt:wsRow
nCol := aWSt:wsCol
nTbrLin := oTbr:rowPos
nTbrCol := oTbr:colPos
oTbr:deHilite()
oTbr:rowPos := nTbrLin + nLin - ROW() // Acerta linha
VLMouseOff()
FOR nInd = oTbr:rightVisible TO oTbr:leftVisible STEP -1
oTbr:colPos := nInd
oTbr:Hilite()
IF COL() - 1 <= nCol
oTbr:Hilite()
EXIT
ENDIF
NEXT
oTbr:refreshCurrent()
VLMouseOn()
ENDCASE
END
If LastKey() != K_ESC .And. MouseESC == .T.
Clrted()
SetColor("N/W,N*/W,,,N*/W")
SetCursor(1)
SetKey(K_SH_F9 ,{||nButton := 1,VLKeyboard(Chr(K_ESC)+Chr(K_ENTER))})
SetKey(K_SH_F10,{||nButton := 2,VLKeyboard(Chr(K_ESC)+Chr(K_ENTER))})
SetKeyMouse(K_SH_F9 ,{20,20,22,37})
SetKeyMouse(K_SH_F10,{20,20,42,57})
Frame(02,00,17,79,"ExclusÆo de Clientes",2,,,"B/W")
Linbutton2(LB_SHOW,NB_GRAY,15,nButton1,2,"&Excluir","Exclui cliente","&Cancelar","Cancela exclusÆo")
@04,02 say "C¢digo...:" Get cCodigo Picture "@!" When DwnMsg("C¢digo do cliente")
@05,45 say "Data Cad.:" Get dDataCad When DwnMsg("Data do cadastro")
Clear Gets
@04,20 say "Cliente....:" Get cCliente Picture "@!" When DwnMsg("Nome do cliente") Valid ! Empty(cCliente)
@05,02 Say "Conjuge..:" Get cConjuge Picture "@!" When DwnMsg("Conjuge do cliente")
@06,02 say "Endere‡o.:" Get cEndereco Picture "@!" When DwnMsg("Endere‡o do cliente")
@06,45 say "Bairro...:" Get cBairro Picture "@!" When DwnMsg("Bairro do cliente")
@07,02 say "Cidade...:" Get cCidade Picture "@!" When DwnMsg("Cidade do cliente")
@07,45 Say "Estado...:" Get cEstado Picture "@!" When DwnMsg("Estado do cliente") Valid ValUF(cEstado)
@07,60 say "CEP...:" Get cCEP Picture "99.999-999" When DwnMsg("CEP da cidade")
@08,02 say "Fone.....:" Get cFone Picture "@!" When DwnMsg("Fone do cliente")
@08,30 say "Fax.:" Get cFax Picture "@!" When DwnMsg("Fax do cliente")
@08,53 say "Celular.:" Get cCelular When DwnMsg("Celular do cliente")
@09,02 say "E-mail...:" Get cEmail Picture "@" When DwnMsg("E-Mail do cliente")
@10,02 say "CPF/CNPJ.:" Get cCPFCNPJ Picture "999.999.999/9999-99" When DwnMsg("CPF ou CNPJ do cliente") Valid ValCNPJCPF(cCPFCNPJ)
@10,35 say "Insc.Est.:" Get cInscEst Picture "@!" When DwnMsg("Inscri‡Æo estadual do cliente") Valid ValInscEst(cEstado,cInscEst)
@11,02 say "Observ...:" Get cObs1 Picture "@!" When DwnMsg("Observa‡Æo 1")
@12,13 Get cObs2 Picture "@!" When DwnMsg("Observa‡Æo 2")
@13,13 Get cObs3 Picture "@!" When DwnMsg("Observa‡Æo 3")
Clear Gets
Set Key K_SH_F10 To
SetKeyMouse(K_SH_F10,{})
nOpcao1 := Linbutton2(LB_PROC,NB_GRAY,15,nButton1,2,"&Excluir","Exclui cliente","&Cancelar","Cancela exclusÆo")
If nOpcao1 == 1
BloqReg()
cadcli->(DbDelete())
Desbloq()
Close cadcli
Else
Close cadcli
RstEnv(aEnv)
EndIf
EndIf
EndIf
If nOpcao == 4
Use CadCli Alias cadcli Shared New
Set Index To CadCli
Set Order To 2
cadcli->(DbGoTop())
If cadcli->(Eof())
Tone(900,5)
nMsgBcoVaz := MsgBox3d1("Banco de dados vazio!")
lExt := .T.
MouseEsc := .F.
DigNome := .F.
Close cadcli
EndIf
If DigNome == .T.
MsgBox3D(,"Digite as letras iniciais (ENTER=Todos)",,"W+/B","B/W")
SetCursor(1)
SetColor("N/W,N*/W,,,N*/W")
cCliente := Space (40)
@12,20 Get cCliente Pict '@!'
Read
nNumDig := Len(AllTrim(cCliente))
Set Order To 2
Locate For AllTrim(cadcli->Cliente) = Subs(cCliente,1,nNumDig)
If cadcli->(Eof()) ; cadcli->(DbGoTop()) ; EndIf
SetCursor(0)
If LastKey() == K_ESC
lExt := .T.
MouseEsc := .F.
Close cadcli
EndIf
EndIf
oTbr:colSep := " ³ "
oTbr:headSep := "Ä"
oTbr:colorSpec := "N*/W,W+/B,R*/W,W+/R"
oTbr:addColumn( oTbc1 )
oTbr:addColumn( oTbc2 )
Win( 03, 03, 20, 75, "Pesquisa de clientes")
SetColor( "N*/W,W+/B" )
@ 23, 00 SAY PADL( "[Esc] Sa¡da", 80 ) COLOR "R*/W" // sair pelo mouse
@ 23, 01 SAY "[PgUp]" COLOR "R*/W" // PgUp pelo mouse
@ 23, 08 SAY "[PgDn]" COLOR "R*/W" // PgDn pelo mouse
@ 23, 16 SAY "[" + CHR( 24 ) + "]" COLOR "R*/W" // Sobe pelo mouse
@ 23, 20 SAY "[" + CHR( 25 ) + "]" COLOR "R*/W" // Desce pelo mouse
@ 23, 24 SAY "[" + CHR( 27 ) + "]" COLOR "R*/W" // Esq. pelo mouse
@ 23, 28 SAY "[" + CHR( 26 ) + "]" COLOR "R*/W" // Dir. pelo mouse
WHILE !lExt
VLMouseOff()
WHILE !oTbr:stabilize() ; END
VLMouseOn()
aWSt := WaitState() // substitui o INKEY()
DO CASE
CASE aWSt:wsType == WAIT_KEYPRESS // o evento foi uma tecla
DO CASE // manipula‡Æo padrÆo de teclas
CASE aWst:wsKey == K_DOWN ; oTbr:down()
CASE aWst:wsKey == K_UP ; oTbr:up()
CASE aWst:wsKey == K_PGDN ; oTbr:pageDown()
CASE aWst:wsKey == K_PGUP ; oTbr:pageUp()
CASE aWst:wsKey == K_CTRL_PGUP ; oTbr:goTop()
CASE aWst:wsKey == K_CTRL_PGDN ; oTbr:goBottom()
CASE aWst:wsKey == K_RIGHT ; oTbr:right()
CASE aWst:wsKey == K_LEFT ; oTbr:left()
CASE aWst:wsKey == K_HOME ; oTbr:home()
CASE aWst:wsKey == K_END ; oTbr:end()
CASE aWst:wsKey == K_CTRL_LEFT ; oTbr:panLeft()
CASE aWst:wsKey == K_CTRL_RIGHT ; oTbr:panRight()
CASE aWst:wsKey == K_CTRL_HOME ; oTbr:panHome()
CASE aWst:wsKey == K_CTRL_END ; oTbr:panEnd()
CASE aWst:wsKey == K_ESC
lExt := .T.
Close cadcli
Clrted()
ENDCASE
// abaixo - evento MOUSEDOWN - o usu rio clicou com o mouse
CASE aWst:wsType == WAIT_MOUSEDOWN .AND. aWst:wsRow == 23 // na linha 23
IF aWst:wsCol >= 68 .AND. aWst:wsCol <= 78 // clicou em "[Esc] Sa¡da"
lExt := .T.
Close cadcli
Clrted()
ELSEIF aWst:wsCol >= 01 .AND. aWst:wsCol <= 06 // clicou em "[PgUp]"
oTbr:pageUp()
ELSEIF aWst:wsCol >= 08 .AND. aWst:wsCol <= 13 // clicou em "[PgDn]"
oTbr:pageDown()
ELSEIF aWst:wsCol >= 16 .AND. aWst:wsCol <= 18 // clicou em "Sobe"
oTbr:up()
ELSEIF aWst:wsCol >= 20 .AND. aWst:wsCol <= 22 // clicou em "Desce"
oTbr:down()
ELSEIF aWst:wsCol >= 24 .AND. aWst:wsCol <= 26 // clicou em "Esquerda"
oTbr:left()
ELSEIF aWst:wsCol >= 28 .AND. aWst:wsCol <= 30 // clicou em "Direita"
oTbr:right()
ENDIF
CASE aWSt:wsType == WAIT_MOUSEDOWN .AND.; // c¢digo para habilitar cliques nas c‚lulas do tbrowse
aWSt:wsRow >= 6 .AND. aWSt:wsRow <= 20 .AND.;
aWSt:wsCol >= 3 .AND. aWSt:wsCol <= 75
nLin := aWSt:wsRow
nCol := aWSt:wsCol
nTbrLin := oTbr:rowPos
nTbrCol := oTbr:colPos
oTbr:deHilite()
oTbr:rowPos := nTbrLin + nLin - ROW() // Acerta linha
VLMouseOff()
FOR nInd = oTbr:rightVisible TO oTbr:leftVisible STEP -1
oTbr:colPos := nInd
oTbr:Hilite()
IF COL() - 1 <= nCol
oTbr:Hilite()
EXIT
ENDIF
NEXT
oTbr:refreshCurrent()
VLMouseOn()
ENDCASE
END
EndIf
RstEnv(aEnv)
Return Nil
Function fNovoCli
Use CadCli Alias cadcli Shared New
Set Index To CadCli
Set Order To 1
cadcli->(DbGoTop())
cCodigo := Padl("1",5,"0")
Do While ! Eof()
Locate For cadcli->Codigo == cCodigo
If Eof()
Close cadcli
Return cCodigo
Else
cCodigo := AllTrim(Str(Val(cCodigo)+1))
cCodigo := Padl(cCodigo,5,"0")
EndIf
EndDo
Close cadcli
Return cCodigo