Iniciante em FiveWin

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

Avatar do usuário
rduraes
Usuário Nível 1
Usuário Nível 1
Mensagens: 24
Registrado em: 23 Abr 2008 15:57
Localização: Curvelo - MG

Iniciante em FiveWin

Mensagem por rduraes »

Estou iniciando no FiveWin e estou apanhando demais.
Consegui criar uma WINDOW com seu respectivo menu, barra de ferramentas, etc ...
Comecei a montar um programa para entrada e manutenção de dados. Montei a Dialog, Listbox e criei os botões. Até consegui inserir dados.
Só que na inserção de dados eu consigo inserir um de cada vez. Ou seja, clico no botão inserir ele abre a tela insiro os dados mando atualizar e para inserir outro tenho que acompanhar todo o processo. Não consegui colocar isto dinâmico. Ou seja, clicar somente uma vez no botão inserir e ficar na dialog de inserção até eu inserir todos os dados que forem necesários. Tipo um loop onde só saio da tela quando tecla <Esc> ou <Cancelar>.
Alguém teria um exemplo que como poderia fazer esta rotina. :(
Desde já agradeço.

Rogério Durães
xHarbour 0.99.71; FiveWin 7.04; Pelles C 4.5; MyMake 1.9j
Euclides
Usuário Nível 3
Usuário Nível 3
Mensagens: 154
Registrado em: 12 Mai 2007 14:07
Localização: São Paulo, Capital

Re: Iniciante em FiveWin

Mensagem por Euclides »

Rogério,
É claro que utilizo rotinas difrentes nos meus sistemas, mas para efeito didático, está de bom tamanho...
[]´s, Euclides

Código: Selecionar todos

Function inclui()
local oDlg, cCampo, cText:="Inclua os dados" 
   do while .T.
      cCampo=space(20)
      DEFINE DIALOG oDlg FROM 10, 20 TO 18, 59.5 TITLE " T I T U L O"
      @ 0.6, 4 SAY cText OF oDlg SIZE 250, 10 UPDATE
      @ 1.6, 4 GET cCampo SIZE 100, 12  OF oDlg  ;
               VALID iif(empty(cCampo), (cText:="Dado Inválido", oDlg:update,.F.),;
                     (cText:="Inclua os dados", oDlg:update,.T.))
*     Mais GETs
      @ 3.5, 5 BUTTON "Ok"      OF oDlg SIZE 35, 12  ACTION oDlg:End(1)
      @ 3.5,13 BUTTON "Cancela" OF oDlg SIZE 35, 12  ACTION oDlg:End() CANCEL
      ACTIVATE DIALOG oDlg CENTERED
      if oDlg:nResult=1
*        Rotina para gravar os dados
         loop
      endif
      exit
   enddo
return nil
-------------------------------
Nota de Moderação (Toledo): mensagem editada para colocar a tag [ code ]
Veja como utilizar esta tag: faq.php?mode=bbcode#f21
Avatar do usuário
rduraes
Usuário Nível 1
Usuário Nível 1
Mensagens: 24
Registrado em: 23 Abr 2008 15:57
Localização: Curvelo - MG

Re: Iniciante em FiveWin

Mensagem por rduraes »

Euclides, obrigado pela dica!
Implementei a idéia no meu programa. Mas não estou conseguindo cancelar a entrada. Ou seja, quando acabo de inserir os dados não consigo sair.
Segue abaixo a rotina:

Código: Selecionar todos

////////////////////////////////////
#include "FiveWin.CH"

function SRP02()
local oDlg,oLbx
local oBtn01,oBtn02,oBtn03,oBtn04,oBtn05,oBtn06,oBtn07

use SRA02 alias A02 new exclusive

DEFINE DIALOG oDlg RESOURCE 'SRP02' of oWnd
oDlg:lHelpIcon:= .f.
REDEFINE LISTBOX oLbx FIELDS str(a02->A02_CODIGO,4),a02->A02_DESCRI,transform(a02->A02_PRECO,"@E 999,999,999.99") ;
SIZES 100,320,100 HEADERS "CÓDIGO","DESCRIÇÃO","PREÇO" ID 401 OF oDlg
REDEFINE BUTTON oBtn01 ID 501 OF oDlg ACTION P02Inclui(oLbx,oDlg)  // Inclui
REDEFINE BUTTON oBtn02 ID 502 OF oDlg                     // Altera
REDEFINE BUTTON oBtn03 ID 503 OF oDlg                     // Excluir
REDEFINE BUTTON oBtn04 ID 504 OF oDlg                     // Procura
REDEFINE BUTTON oBtn05 ID 505 OF oDlg                     // Chave
REDEFINE BUTTON oBtn06 ID 506 OF oDlg                     // Imprime
REDEFINE BUTTON oBtn10 ID 507 OF oDlg ACTION (oDlg:End()) // Saída
ACTIVATE DIALOG oDlg CENTERED

return nil

//////////////////////////////
// Inclui itens no cardápio //
//////////////////////////////
function P02Inclui(oLbx,oDlg)
local oDlgMan,nCodigo,cDescri,nPreco
local lSai:=.f.
local oBtn07,oBtn08

do while .t.

   a02->(dBGoBottom())
   nCodigo:=nPreco:=0
   cDescri:=space(25)


   DEFINE DIALOG oDlgMan RESOURCE "INCLUI" OF oWnd
   oDlgMan:Cargo:=.f.
   oDlgMan:cCaption:="Inclusão de clientes"
   lSai:=.f.

   REDEFINE GET nCodigo ID 401 OF oDlgMan picture "9999"
   REDEFINE GET cDescri ID 402 OF oDlgMan picture "@!" valid ! empty(cDescri)
   REDEFINE GET nPreco  ID 403 OF oDlgMan picture "99,999.99" valid ! empty(nPreco)

   REDEFINE BUTTON oBtn07 ID 5001 OF oDlgMan ACTION oDlgMan:End(1)
   REDEFINE BUTTON oBtn08 ID 5002 OF oDlgMan ACTION ODlgMan:End() CANCEL

   ACTIVATE DIALOG oDlgMan CENTERED

   if oDlgMan:nResult=1
      a02->(dBAppend())
      replace a02->A02_CODIGO with nCodigo
      replace a02->A02_DESCRI with cDescri, a02->A02_PRECO with nPreco
      oLbx:Refresh()
   endif
   oDlg:SetFocus()

enddo

return nil
/////////////////////////////////////////////
A rotina é esta P02Inclui. O loop para inserir está ok. Só não consigo sair.

Rogério Durães
xHarbour 0.99.71; FiveWin 7.04; Pelles C 4.5; MyMake 1.9j

-------------------------------
Nota de Moderação (Toledo): mensagem editada para colocar a tag [ code ]
Veja como utilizar esta tag: faq.php?mode=bbcode#f21
Euclides
Usuário Nível 3
Usuário Nível 3
Mensagens: 154
Registrado em: 12 Mai 2007 14:07
Localização: São Paulo, Capital

Re: Iniciante em FiveWin

Mensagem por Euclides »

Rogerio,
verifique como estão colocados no exemplo os comandos LOOP e EXIT
T+ Euclides
Avatar do usuário
rduraes
Usuário Nível 1
Usuário Nível 1
Mensagens: 24
Registrado em: 23 Abr 2008 15:57
Localização: Curvelo - MG

Re: Iniciante em FiveWin

Mensagem por rduraes »

Ok!
Passou despercebido.
Obrigado. Deu certo!
:xau
Responder