Resolvi migrar todas minhas telas de cadastro para a HWGUI, portanto para näo ter ue começar do zero gostaria de saber se algume poderia me arrumar um exemplo de um cadastro simples com inclusäo, alteraçäo e exclusäo de uma DBF (pode ser simples apenas com os campos: código e descriçäo)
Muito Obrigado
Exemplo com inclusäo/alteraçäo e exclusäo
Moderador: Moderadores
- Luciano Bonfim
- Usuário Nível 3

- Mensagens: 414
- Registrado em: 23 Ago 2007 09:34
- Localização: Rio de Janeiro / São Paulo
- Contato:
Exemplo com inclusäo/alteraçäo e exclusäo
Muito Obrigado,
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Abaixo um pequeno Exemplo:
Para fazer a chama, faço assim:
Inicio das Funções....
Bom se eu esqueci de algo me desculpa e me avisa. O exemplo é simples, se prescisar de mais podes providenciar...
Obs: Vc pode usar Redefine tmb. para desenhar as telas em WorkShop ou outra ferramenta dessas, porem se quiser amanha depois usar o mesmo codigo sem muita alteração em windows e linux, ai não podera ter redefine, pq o mesmo só funciona em Windows.
Abraços
Leonardo Machado
Para fazer a chama, faço assim:
Código: Selecionar todos
PESQ_CAT("S")
Ou seja ele inica para somente pesquisa não podendo fazer nd alem de pesquisar e selecionar por outra função o registro que estiver marcado no browse.Código: Selecionar todos
PESQ_CAT("N")
Ou seja ele aceita cadastro de novo registro, alteração e exclusão, e claro usando o browse tmb.
Código: Selecionar todos
*****************
Function PESQ_CAT // tudo inicia aqui
*****************
Local oFrm, oFont
PRIVATE oDlgHabla:=NIL
Private gPes,vPes:="",keyAnt:=0
PRIVATE oIcon := HIcon():AddResource("ICON_1") // caminho do icone no arquivo resourse
PARA PESQUISA
SetToolTipBalloon(.t.) // tooltip em formato de balão
IF PESQUISA="N" // caso não for somente pesquisa
dbcloseall()
if !file("CATEGOR")
CRIA_CATEGOR()
ENDIF
USE CATEGOR ALIAS CATEGOR shared
SET INDEX TO CATEGOR
endif
SELE CATEGOR
*** FERRAMENTAS DE MULTI-PESQUISA AUTOMATICA
aCHAVES := {}
nORD := INDEXORD()
nCNT := 1
nMAXLEN := 0
IF nORD # 0
DO WHILE .T.
IF !EMPTY( INDEXKEY(nCNT) )
aADD(aCHAVES, " "+INDEXKEY(nCNT)+" ")
nCNT++
ELSE
EXIT
ENDIF
ENDDO
aEVAL(aCHAVES, {|cV,nV| IF( LEN( aCHAVES[nV] ) > nMAXLEN,;
nMAXLEN := LEN( aCHAVES[nV] ), NIL ) })
ENDIF
DBSETORDER(nORD)
DBGOTOP()
PREPARE FONT oFontBtn NAME "Arial" WIDTH 0 HEIGHT -14 charset 255
INIT DIALOG oFrm TITLE "Pesquisa de Categoria de Fornecedor" CLIPPER FONT oFontBtn;
AT 0,0;
SIZE 700,520;
ICON oIcon ;
STYLE WS_DLGFRAME + WS_SYSMENU + DS_CENTER
IF PESQUISA="N"
@ 10,450 BUTTON "Cadastrar" ON CLICK {||TELA_CAD_CAT("C"),oBrw:Refresh()};
SIZE 100,28 STYLE WS_TABSTOP ;
TOOLTIP "Clique Aqui Para Cadastrar"
@ 140,450 BUTTON "Alterar" ON CLICK {||TELA_CAD_CAT("A"),oBrw:Refresh()};
SIZE 100,28 STYLE WS_TABSTOP ;
TOOLTIP "Clique Aqui Para Alterar"
@ 270,450 BUTTON "Excluir" ON CLICK {||TELA_CAD_CAT("D"),oBrw:Refresh()};
SIZE 100,28 STYLE WS_TABSTOP ;
TOOLTIP "Clique Aqui Para Excluir"
ENDIF
@ 460,450 BUTTON "Fechar" ON CLICK {||EndDialog()};
SIZE 100,28 STYLE WS_TABSTOP ;
TOOLTIP "Clique Aqui Para Fechar"
@ 10,40 BROWSE oBrw DATABASE OF oFrm SIZE 680,400;
STYLE WS_VSCROLL + WS_HSCROLL;
ON CLICK {|o,key| BrowseKey_CAT(o, key ) }
oBrw:alias := aLIAS()
oBrw:bKeyDown := {|o,key| BrowseKey_CAT(o, key ) }
@ 5,10 say "F2 - Busca / F4 - Muda Ordem" size GETDESKTOPWIDTH()-20,20;
STYLE SS_CENTER COLOR x_BLUE
PREPARE FONT oFont NAME "Arial" WIDTH 0 HEIGHT -16
oBrw:AddColumn( HColumn():New( "Tipo de Categoria", FieldBlock(Fieldname(2)),"C", 35,0) )
FOR nI := 1 TO 1
oBrw:aColumns[nI]:nJusHead := DT_CENTER //CENTRALIZA NO NOME DO CAMPO
oBrw:aColumns[nI]:nJusLin := DT_LEFT //COLOCA PARA DIREITA A LINHA
NEXT
oBrw:aColumns[1]:length := 40 // TAMANHO DA COLUNA
oBrw:Freeze:=1 // congela a coluna
oBrw:Refresh()
oBrw:SetFocus()
setfocus(obrw)
//oFrm:bActivate := {||oBrw:SetFocus()}
oFrm:Activate()
return nil
*************************************
FUNCTION BrowseKey_CAT( oBrowse, key)
*************************************
DO CASE
CASE KEY= VK_ESCAPE
EndDialog()
CASE KEY = 1 // CLIK DO MOUSE NAO ACHEI A DEFINE..
IF PESQUISA="N"
TELA_CAD_CAT("A")
else
EndDialog()
Endif
CASE KEY = VK_F1
// Sobre() // informações sobre a empresa
CASE KEY = VK_F2
BUSCA_NOME()
CASE KEY = VK_F4
Lista_ordem()
CASE KEY = VK_F9
//ShellExecute("calc") //calculadora
OTHERWISE
if key=13 .OR. key=65 // tecla "ENTER" e tecla "A"
IF PESQUISA="N"
TELA_CAD_CAT("A")
else
EndDialog()
endif
elseif key=46 // tecla "DEL"
IF PESQUISA="N"
TELA_CAD_CAT("D")
endif
elseif key=67 // tecla "C"
IF PESQUISA="N"
TELA_CAD_CAT("C")
endif
ENDIF
ENDCASE
RETURN .T.
***********************
FUNCTION TELA_CAD_CAT() // Tela para cadastro
***********************
PRIVATE oJanela
PRIVATE LBLCAT, LBLCLS
PRIVATE LBLCLS
PRIVATE wCAT := Space(35)
PRIVATE wCLS := 0
PRIVATE oCAT
PRIVATE oCLS
SetToolTipBalloon(.t.)
SetColorinFocus( .t. )
vTitulo="Cadastro de Categoria"
PARA TIPO_CAD
IF TIPO_CAD="A" .or. TIPO_CAD="D"
vTitulo="Alteração de Categoria"
wCAT := CATEGOR->CATEGORIA
wCAT2 := CATEGOR->CATEGORIA
wCLS := CATEGOR->CLS
ELSE
SELE CATEGOR
DbGoBottom()
wCLS := CATEGOR->CLS+1
ENDIF
IF TIPO_CAD="D"
vTitulo="Excluir Categoria"
Endif
PREPARE FONT oFont NAME "Arial" WIDTH 0 HEIGHT -12 WEIGHT 400
INIT DIALOG oJanela CLIPPER NOEXIT TITLE vTitulo;
AT 0,0 SIZE 600,130;
ICON oIcon ;
FONT oFont ;
STYLE DS_CENTER + WS_VISIBLE + WS_CAPTION + WS_SYSMENU
@ 10 ,20 SAY LBLCLS CAPTION "Codigo....:" SIZE 100,22
@ 10 ,50 SAY LBLCAT CAPTION "Categoria.:" SIZE 100,22
IF TIPO_CAD="D"
@ 90 ,20 GET OCLS VAR WCLS PICTURE "999" SIZE 100,22 STYLE WS_DISABLED
@ 90 ,50 GET OCAT VAR WCAT PICTURE Replicate("X",30) SIZE 300,22 STYLE WS_DISABLED
else
@ 90 ,20 GET OCLS VAR WCLS PICTURE "999" SIZE 80,22;
TOOLTIP "Informe o Codigo da Categoria" STYLE WS_DISABLED
@ 90 ,50 GET OCAT VAR WCAT PICTURE "@!" VALID {||Focaliza()} SIZE 300,22;
TOOLTIP "Informe o Nome da Categoria"
Endif
IF TIPO_CAD="A" .or. TIPO_CAD="C"
@ 100,80 BUTTON btnOk CAPTION "&Salvar" ;
TOOLTIP "Salvar Registro";
SIZE 100,32 ON CLICK {||oJanela:close(),Grava_Cat() } STYLE WS_TABSTOP
ELSE
@ 100,80 BUTTON btnOk CAPTION "&Excluir" ;
TOOLTIP "Excluir Categoria";
SIZE 100,32 ON CLICK {|| del_cat(),oJanela:close() } STYLE WS_TABSTOP
ENDIF
@ 400,80 BUTTON OBTN2 CAPTION "&Voltar" ;
TOOLTIP "Voltar Sem Salvar";
SIZE 100,32 ON CLICK {|| oJanela:close()} STYLE WS_TABSTOP
oJanela:Activate()
Return nil
********************
FUNCTION Grava_Cat()
********************
SELE CATEGOR
IF EMPTY(wCAT)
OBRIGA() // mensagem que avisa que é obrigatorio esse campo
oCAT:setfocus()
RETURN
ENDIF
IF TIPO_CAD="C"
Apprede() // apend blank
ELSEIF TIPO_CAD="A"
DBGOTOP()
DBSETORDER(1)
DBSEEK(wCAT2)
ENDIF
TRAVAREG("S") // travaregistro
CATEGOR->CLS := wCLS
CATEGOR->CATEGORIA := HB_AnsiToOem(wCAT)
DBCOMMIT()
LIBERAREG() // libera registro
DBGOTOP()
oBrw:Refresh()
RETURN
Function DEL_CAT()
SELE CATEGOR
DBSETORDER(1)
DBSEEK(wCAT)
TRAVAREG("S")
DELE
DBCOMMIT()
LIBERAREG()
DBGOTOP()
oBrw:Refresh()
Return
********************
Function CRIA_CATEGOR
********************
private aField[2]
aField[1] := {"CLS" , "N", 2, 0}
aField[2] := {CATEGORIA" , "C", 35, 0}
DBcreate("CATEGOR", aField,"DBFCDX")
USE CATEGOR ALIAS CATEGOR excl
ferase("CATEGOR")
index on CATEGORIA TAG 1 to CATEGOR
index on CLS TAG 2 to CATEGOR
Sele CATEGOR
USE
Return
*************************
FUNCTION BUSCA_NOME(oPos)
*************************
nCHAVES := LEN(aCHAVES)
IF nCHAVES <= 1
MSGINFO("Nao há outras ordes ou chaves De Indice Ativa para fazer Busca nesse Arquivo","Aviso do Sistema")
else
PRIVATE oIcon := HIcon():AddResource("ICON_1")
Private oFrm2,chave
Private vchave:=""
vchave:=Space(20)
INIT DIALOG oFrm2 CLIPPER NOEXIT TITLE "Busca Pelo Campo Indexado";
AT 0,0 SIZE 600,130;
ICON oIcon ;
STYLE DS_CENTER + WS_VISIBLE + WS_CAPTION + WS_SYSMENU
SetColorinFocus(.t.)
SetToolTipBalloon(.t.)
@ 5,10 SAY "Busca.:" size 580,25
@ 5,30 GET Chave VAR vchave PICTURE "@!" VALID {||Focaliza()} SIZE 580,25;
TOOLTIP "Informe o Nome que Deseja Buscar"
@ 5,70 BUTTON btnOk CAPTION "Pesquisar";
ON CLICK { || DBSEEK( UPPER(Chave:setGet()), .t. ) , oBrw:Refresh(), oFrm2:Close() };
SIZE 100,25 STYLE WS_TABSTOP;
TOOLTIP "Confirma a Busca"
@ 150,70 BUTTON "Fechar";
ON CLICK {||oFrm2:Close()};
SIZE 100,25;
TOOLTIP "Fechar Janela"
ACTIVATE DIALOG oFrm2
Endif
Return .T.
**********************
Function Lista_ordem()
**********************
Local oFrm3
nCHAVES := LEN(aCHAVES)
IF nCHAVES <= 1
MSGINFO("Nao há outras ordes ou chaves De Indice Ativa de pesquisa para este Arquivo","Aviso do Sistema")
ELSE
nOLD := INDEXORD()
nORDEM := WChoice( aCHAVES, "Seleciona Ordem", 05+nCHAVES, 100+nMAXLEN, ,,,, )
IF nORDEM > 0 .AND. nOLD # nORDEM
DBSETORDER(nORDEM)
ENDIF
ENDIF
dbGoTop()
oBrw:Refresh()
Return
Obs: Vc pode usar Redefine tmb. para desenhar as telas em WorkShop ou outra ferramenta dessas, porem se quiser amanha depois usar o mesmo codigo sem muita alteração em windows e linux, ai não podera ter redefine, pq o mesmo só funciona em Windows.
Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql