Problema ao sair da DIALOG... (resolvido)

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

Moderador: Moderadores

Avatar do usuário
FARLEY RIBEIRO
Usuário Nível 2
Usuário Nível 2
Mensagens: 89
Registrado em: 24 Jul 2007 10:26
Localização: MONTES CLAROS-MG

Problema ao sair da DIALOG... (resolvido)

Mensagem por FARLEY RIBEIRO »

olá pessoal...
no código abaixo..
quando o foco está no código pressiono o botão SAIR o foco vai para o campo DESCRIÇÃO e somente clicar novamente no botão SAIR e que sai e fecha o diálogo.

quando o foco está no campo DESCRIÇÃO pressiono o botão SAIR, sai e fecha o diálogo.

O que pode ser?

Atenciosamente

Farley
farleyribeiro@bol.com.br

Código: Selecionar todos

lSair = .f. // controla a saida do dialogo evitar sair com o ESC
DEFINE DIALOG oDlg TITLE "SIAC - MANUTENÇÃO GRUPOS." ;
    FROM 1,1 TO 450,700 PIXEL STYLE nOR( DS_MODALFRAME )

@ LINS(0),COLS(5) say "Código: " OF oDlg FONT oFntC PIXEL
@ LINS(0),COLS(10) get ocodigo var mcodigo pict "@R 9999" ;
    valid fExisteGrupo(oDlg,lNovo) SIZE 50,10 OF oDlg ;
    FONT oFntC PIXEL UPDATE RIGHT
ocodigo:bGotFocus ={||ocodigo:SetColor(PRETO, AMARELO )}
ocodigo:bLostFocus={||ocodigo:SetColor(PRETO, BRANCO )}
ocodigo:bKeyDown:={|nKey| If(nKey=VK_ESCAPE,;
(lSair := .t., oDlg:End()),)}
@ LINS(2),COLS(2) say "Descrição .....: " OF oDlg FONT oFntC PIXEL
@ LINS(2),COLS(10) get odescricao var mdescricao SIZE 180,10 OF oDlg;
FONT oFntC PIXEL UPDATE
odescricao:bGotFocus ={||odescricao:SetColor(PRETO, AMARELO )}
odescricao:bLostFocus={||odescricao:SetColor(PRETO, BRANCO )}
odescricao:bKeyDown:={|nKey| If(nKey=VK_ESCAPE,;
(oBtn2:disable(),fFocus("ocodigo")),)}
@ 186, 285 BUTTON oBtn3 Prompt "Sair" SIZE 35,16 PIXEL OF oDlg ;
ACTION (lSair := .t., oDlg:End()) FONT oFntC
ACTIVATE DIALOG oDlg CENTER VALID (lSair) ON INIT (oBtn2:disable()) 
[/size]
Editado pela última vez por FARLEY RIBEIRO em 01 Nov 2007 15:47, em um total de 1 vez.
Borland BCC(5.51)/PellesC(5.01)/Fivewin(2.6)/xHarbour.org(0.99.50)/Med(3.02)/DBFNTX/DBFCDX /WvWToools(0.83)
Avatar do usuário
FARLEY RIBEIRO
Usuário Nível 2
Usuário Nível 2
Mensagens: 89
Registrado em: 24 Jul 2007 10:26
Localização: MONTES CLAROS-MG

Mensagem por FARLEY RIBEIRO »

Esqueci de colocar a função fExisteGrupo...
tá ai..

Código: Selecionar todos

func fExisteGrupo(oDlg)

if empty(mcodigo)
   msgstop( "Informe o código!!!", "Atenção" )
   return .f.
endif
mcodigo = strzero(val(mcodigo),4,0)
ocodigo:refresh()
ocodigo:setfocus()
sele GRUPO
seek mcodigo
if !found()
   lNovo = .t.
else
   lNovo = .f.
endif
mdescricao = descricao
odescricao:refresh()
mserv_prod = if(lnovo = .t., "P", serv_prod)
oserv_prod:refresh()
odescricao:refresh()
odescricao:setfocus()
if lNovo
   oBtn2:disable()
else
   oBtn2:enable()
endif
return (.t.)
Borland BCC(5.51)/PellesC(5.01)/Fivewin(2.6)/xHarbour.org(0.99.50)/Med(3.02)/DBFNTX/DBFCDX /WvWToools(0.83)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem por rochinha »

Amiguinho

Isto acontence pelo fato do controle possuir um VALID e pelo que vi em sua função ela retorna .F. quando o campo codigo estiver vazio.

Outra coisa:

Em se tratando de telas de cadastramento onde o registro precisara de um codigo, não seria correto pesquisa se existe um codigo e criar um novo, porque se voce estiver em uma rede com varios terminais cadastrando no mesmo modulo toda codificação vai pro saco.

Em cadastros nunca coloque a opção de codigo com primeiro campo, somente se for pra efeito de cadastramento de codigo interno já existente e utilizado pelo usuário.

Deixe a criação do codigo somente ao completar a ação e se for confirmado pelo usuário de que os dados estão corretos.

Para tanto na sessão codigo fonte coloquei uma pequena função de codificação de uso geral e voce poderá acrescentar em seus sistemas.

Código: Selecionar todos

...
   ACTIVATE DIALOG oMOVDlg CENTERED
   if lSave
      dbSelectArea( "CLIENTES" )
      OrdSetFocus(0)
      if TIPO_ACAO = "NOVO"
         M->IDCLIENTE := PsqControle( "CLIENTES" )
         dbAppend()
      else
         dbRlock()
      endif
...
Esta função cria um pequeno .DBF de controle e vai armazenando cada variavel que for passada e o ultimo numero usado, no exemplo acima passei CLIENTES, então um registro com a frase CLIENTE e o numero criado será acrescentado.

Código: Selecionar todos

...
         M->IDPEDIDO := PsqControle( "PEDIDOS" )
...
Neste outro exemplo sera armazenado IDPEDIDO e o numero sequencial referente ao ultimo pedido utilizado.

Função de Autonumeração( Uso Geral )
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
FARLEY RIBEIRO
Usuário Nível 2
Usuário Nível 2
Mensagens: 89
Registrado em: 24 Jul 2007 10:26
Localização: MONTES CLAROS-MG

Mensagem por FARLEY RIBEIRO »

Solução encontrada..

@ 186, 285 BUTTON oBtn3 .... ACTION ... CANCEL

Acrescentar a CLAUSULA CANCEL ... no botão...

Muito agradecido

Abraços

Farley
Borland BCC(5.51)/PellesC(5.01)/Fivewin(2.6)/xHarbour.org(0.99.50)/Med(3.02)/DBFNTX/DBFCDX /WvWToools(0.83)
Responder