Página 1 de 1

Problema ao sair da DIALOG... (resolvido)

Enviado: 26 Out 2007 16:36
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]

Enviado: 26 Out 2007 16:53
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.)

Enviado: 27 Out 2007 05:15
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 )

Enviado: 01 Nov 2007 15:46
por FARLEY RIBEIRO
Solução encontrada..

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

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

Muito agradecido

Abraços

Farley