Página 1 de 1

Setar foco no getbox e voltar a funçao que a chamou

Enviado: 07 Out 2015 14:27
por Nascimento
Amigos estou com uma dificuldade imensa em voltar a funçao apos o foco no getbox

vou tentar explicar fazendo um bloco aqui

Código: Selecionar todos

#include 'minigui.ch'      

function main()

set deleted on
SET DATE  TO BRITISH
SET CENT  ON
SET NAVIGATION EXTENDED

Private nNum :=   spac(03)
Private cNonbre:= spac(09)
Private dData:=   date()
private troca := .t.
if !file('cliente.dbf')

  aStru := {;
  {'NUMERO','C',3,00},;
  {"NOME" ,"C",30,00},;
  {"DATA" ,"D",8,00}}
  DBCREATE( 'cliente.dbf' , aStru)

  use cliente.dbf alias cli
  
  for x=1 to 10
    append blank 
    REPLACE NUMERO WITH STRZERO(X,3)
    REPLACE NOME WITH "NOME "+STRZERO(X,3)
    COMMIT
  next 
  index on numero to cli
  set index to cli
else
  use cliente.dbf alias cli
  set index to cli
endif
Go Top

   define Window Form_1 ;
      AT 0,0 ;
      WIDTH 400 HEIGHT 300 ;
      TITLE 'Simulando Problema' MAIN;
      on init{|| (form_1.cnonbre.Enabled:=.f.)}
      
      @ 40 ,20 label l1 value "Numero" font "verdana" size 11 bold transparent
      @ 40 ,150 getbox Number value nNum;
        width 35 height 20 bold pict "999";
        valid {||Qualnumero(this.value)}
     
     @ 70 ,20 label l2 value "Nome     " font 'verdana' size 11 bold transparent
     @ 70 ,150 getbox cNonbre value cNonbre;
       width 80 height 20 bold pict '@!' ;
       valid {||troca(this.value)}
     
     @ 100,20 label l3 value  "Data    " font 'verdana' size 11 bold transparent
     @ 100 ,150 getbox dData  value dData ;
       width 100 height 20 bold pict "@D"
   end Window

   Form_1.Center
   Form_1.Activate

Return Nil


Function QualNumero(local1)
Private Altera := " " 
local1 := STRZERO(val(local1),3)
select cli

seek local1

if found()
   form_1.cNonbre.value:= nome
   if troca
      if msgyesno("Deseja Trocar o Nome ?","Sim Não",.t.)
            Altera = "S"
           form_1.cNonbre.Enabled:= .t.
           form_1.cNonbre.Setfocus
           return .t. // se eu coloco o retur .t. espera a digitação mais 
        endif		    // nao volta pra linha 82 para que é o que preciso 
                           // entrar no altera caso "S"
   endif                // se nao coloco return .t. passa direto pra linha 82

   if Altera = "S"   // que seria aqui...
      msginfo("Segue a Funçao") 
   endif   
    return .t.
else
  msginfo("nao achou")
  return .f.
endif   

********************************************
 
Function troca(local1)

 replace cli->nome with local1
 
 return .t.

***********************************************

Já a Dias e sem exito nessa empreitada , agradeço os amigos que puderem me ajudar...
Att: Nascimento

Setar foco no getbox e voltar a funçao que a chamou

Enviado: 07 Out 2015 14:39
por asimoes
Nascimento,

Qual é a função que você quer o foco do getbox de volta? é isso?

Setar foco no getbox e voltar a funçao que a chamou

Enviado: 07 Out 2015 14:43
por Nascimento
no caso eu quero que ela va troque o nome e volte a mesma funçao no caso linha 83
entendeu
que siga do
" if altera = "S"
... comandos
endif

Setar foco no getbox e voltar a funçao que a chamou

Enviado: 07 Out 2015 15:31
por Toledo
Nascimento escreveu:return .t. // se eu coloco o retur .t. espera a digitação
Na verdade não está esperando a digitação, pois com o return .t. a função QualNumero() é encerrada retornando .T. para o VALID do GetBox, assim o GetBox "Número" é finalizado e passa para o próximo GetBox, que é o campo "Nome".
Então se você precisa fazer alguma outra coisa depois de alterar o "Nome", o correto é usar a função troca() para fazer isto.

Abraços,

Setar foco no getbox e voltar a funçao que a chamou

Enviado: 07 Out 2015 15:56
por Nascimento
sim toledo entendi mais , o caso é se o operador escolher a opçao "NAO" a funçao segue sem ir pra o getbox que como voce observou continua como desabilitado so é habilitado se o operador escolher "SIM"

entendeu ? , como essa parte é uma escolha opcional estava tentando faze-la na mesma funçao sem exito ,
entao criei a troca o qual consegui trocar o nome mais nao retorno a funçao "qualnumero()" seguindo da linha 83

o Problema é como nao encerrar a funçao "Qualnumero" ir ao getbox nNonbre gravar um novo nome
e voltar o controle pra funçao "Qualnumero"

:%

Setar foco no getbox e voltar a funçao que a chamou

Enviado: 07 Out 2015 18:17
por Toledo
Minha sugestão seria:

Código: Selecionar todos

#include 'minigui.ch'      

function main()

set deleted on
SET DATE  TO BRITISH
SET CENT  ON
SET NAVIGATION EXTENDED

Private nNum :=   spac(03)
Private cNonbre:= spac(09)
Private dData:=   date()
private troca := .t.
private altera := ""  \\criar a variavel ALTERA aqui
if !file('cliente.dbf')

  aStru := {;
  {'NUMERO','C',3,00},;
  {"NOME" ,"C",30,00},;
  {"DATA" ,"D",8,00}}
  DBCREATE( 'cliente.dbf' , aStru)

  use cliente.dbf alias cli
  
  for x=1 to 10
    append blank 
    REPLACE NUMERO WITH STRZERO(X,3)
    REPLACE NOME WITH "NOME "+STRZERO(X,3)
    COMMIT
  next 
  index on numero to cli
  set index to cli
else
  use cliente.dbf alias cli
  set index to cli
endif
Go Top

   define Window Form_1 ;
      AT 0,0 ;
      WIDTH 400 HEIGHT 300 ;
      TITLE 'Simulando Problema' MAIN;
      on init{|| (form_1.cnonbre.Enabled:=.f.)}
      
      @ 40 ,20 label l1 value "Numero" font "verdana" size 11 bold transparent
      @ 40 ,150 getbox Number value nNum;
        width 35 height 20 bold pict "999";
        valid {||Qualnumero(this.value)}
     
     @ 70 ,20 label l2 value "Nome     " font 'verdana' size 11 bold transparent
     @ 70 ,150 getbox cNonbre value cNonbre;
       width 80 height 20 bold pict '@!' ;
       valid {||troca(this.value)}
     
     @ 100,20 label l3 value  "Data    " font 'verdana' size 11 bold transparent
     @ 100 ,150 getbox dData  value dData ;
       width 100 height 20 bold pict "@D"
   end Window

   Form_1.Center
   Form_1.Activate

Return Nil

Function QualNumero(local1)
local1 := STRZERO(val(local1),3)
select cli

seek local1

if found()
   form_1.cNonbre.value:= nome
   if troca
      if msgyesno("Deseja Trocar o Nome ?","Sim Não",.t.)
            Altera = "S"
           form_1.cNonbre.Enabled:= .t.
           form_1.cNonbre.Setfocus
           return .t.
      else
           form_1.cNonbre.Enabled:= .f.
      endif

   endif

   return .t.
else
  msginfo("nao achou")
  return .f.
endif   

********************************************
 
Function troca(local1)
Local cQualNumero:=STRZERO(val(form_1.Number.Value),3)

 replace cli->nome with local1

 if Altera = "S"
    msginfo("Segue a Funçao - "+cQualNumero) 
 endif   
 
 return .t.

***********************************************
Abraços,

Setar foco no getbox e voltar a funçao que a chamou

Enviado: 07 Out 2015 19:02
por asimoes
Não sei se é isto, mas veja se atende.
A alteração principal no getbox é usando o when

Código: Selecionar todos

#include 'minigui.ch'      

function main()

set deleted on
SET DATE  TO BRITISH
SET CENT  ON
SET NAVIGATION EXTENDED

Private nNum :=   spac(03)
Private cNonbre:= spac(09)
Private dData:=   date()
private troca := .t., lNome:=.f.
if !file('cliente.dbf')

  aStru := {;
  {'NUMERO','C',3,00},;
  {"NOME" ,"C",30,00},;
  {"DATA" ,"D",8,00}}
  DBCREATE( 'cliente.dbf' , aStru)

  use cliente.dbf alias cli
  
  for x=1 to 10
    append blank 
    REPLACE NUMERO WITH STRZERO(X,3)
    REPLACE NOME WITH "NOME "+STRZERO(X,3)
    COMMIT
  next 
  index on numero to cli
  set index to cli
else
  use cliente.dbf alias cli
  set index to cli
endif
Go Top

   define Window Form_1 ;
      AT 0,0 ;
      WIDTH 400 HEIGHT 300 ;
      TITLE 'Simulando Problema' MAIN;
      on init{|| (form_1.cnonbre.Enabled:=.f.)}
      
      @ 40 ,20 label l1 value "Numero" font "verdana" size 11 bold transparent
      @ 40 ,150 getbox Number value nNum;
        width 35 height 20 bold pict "999";
        valid {||Qualnumero(this.value)}
     
     @ 70 ,20 label l2 value "Nome     " font 'verdana' size 11 bold transparent
     @ 70 ,150 getbox cNonbre value cNonbre;
       width 80 height 20 bold pict '@!' ;
       valid {||troca(this.value)} ;
       when lNome
     
     @ 100,20 label l3 value  "Data    " font 'verdana' size 11 bold transparent
     @ 100 ,150 getbox dData  value dData ;
       width 100 height 20 bold pict "@D"
   end Window

   Form_1.Center
   Form_1.Activate

Return Nil

Function QualNumero(local1)
Private Altera := " " 
local1 := STRZERO(val(local1),3)
select cli

seek local1

if found()
   form_1.cNonbre.value:= nome
   if troca
      if msgyesno("Deseja Trocar o Nome ?","Sim Não",.t.)
            Altera = "S"
           form_1.cNonbre.Enabled:= .t.
           form_1.cNonbre.Setfocus
           //return .t. // se eu coloco o retur .t. espera a digitação mais 
        endif          // nao volta pra linha 82 para que é o que preciso 
                           // entrar no altera caso "S"
   endif                // se nao coloco return .t. passa direto pra linha 82

   if Altera = "S"   // que seria aqui...
      lNome:=.t.
      msginfo("Segue a Funçao") 
   endif   
   return .t.
else
  msginfo("nao achou")
  return .f.
endif   

********************************************
 
Function troca(local1)

 replace cli->nome with local1
 
 return .t.

***********************************************

Setar foco no getbox e voltar a funçao que a chamou

Enviado: 07 Out 2015 19:17
por asimoes
Versão 2

Código: Selecionar todos

#include 'minigui.ch'      

function main()

set deleted on
SET DATE  TO BRITISH
SET CENT  ON
SET NAVIGATION EXTENDED

Private nNum :=   spac(03)
Private cNonbre:= spac(09)
Private dData:=   date()
private troca := .t., lNome:=.f.
if !file('cliente.dbf')

  aStru := {;
  {'NUMERO','C',3,00},;
  {"NOME" ,"C",30,00},;
  {"DATA" ,"D",8,00}}
  DBCREATE( 'cliente.dbf' , aStru)

  use cliente.dbf alias cli
  
  for x=1 to 10
    append blank 
    REPLACE NUMERO WITH STRZERO(X,3)
    REPLACE NOME WITH "NOME "+STRZERO(X,3)
    COMMIT
  next 
  index on numero to cli
  set index to cli
else
  use cliente.dbf alias cli
  set index to cli
endif
Go Top

   define Window Form_1 ;
      AT 0,0 ;
      WIDTH 400 HEIGHT 300 ;
      TITLE 'Simulando Problema' MAIN;
      on init{|| (form_1.cnonbre.Enabled:=.f.)}
      
      @ 40 ,20 label l1 value "Numero" font "verdana" size 11 bold transparent
      @ 40 ,150 getbox Number value nNum;
        width 35 height 20 bold pict "999";
        valid {||Qualnumero(this.value)}
     
     @ 70 ,20 label l2 value "Nome     " font 'verdana' size 11 bold transparent
     @ 70 ,150 getbox cNonbre value cNonbre;
       width 80 height 20 bold pict '@!' ;
       valid {||troca(this.value)} ;
       when lNome
     
     @ 100,20 label l3 value  "Data    " font 'verdana' size 11 bold transparent
     @ 100 ,150 getbox dData  value dData ;
       width 100 height 20 bold pict "@D"
   end Window

   Form_1.Center
   Form_1.Activate

Return Nil

Function QualNumero(local1)
Private Altera := " " 
local1 := STRZERO(val(local1),3)
select cli

seek local1

if found()
   form_1.cNonbre.value:= nome
   if troca
      if msgyesno("Deseja Trocar o Nome ?","Sim Não",.t.)
            Altera = "S"
           form_1.cNonbre.Enabled:= .t.
           form_1.cNonbre.Setfocus
           //return .t. // se eu coloco o retur .t. espera a digitação mais 
        endif          // nao volta pra linha 82 para que é o que preciso 
                           // entrar no altera caso "S"
   endif                // se nao coloco return .t. passa direto pra linha 82

   if Altera = "S"   // que seria aqui...
      lNome:=.t.
      msginfo("Segue a Funçao") 
   else
      lNome:=.f.
      form_1.cNonbre.Enabled:= lNome
      form_1.dData.SetFocus
   endif
   return .t.
else
  msginfo("nao achou")
  return .f.
endif   

********************************************
 
Function troca(local1)

 replace cli->nome with local1
 
 return .t.

***********************************************

Setar foco no getbox e voltar a funçao que a chamou

Enviado: 07 Out 2015 19:42
por Nascimento
Toledo escreveu: o correto é usar a função troca()
Seguindo a linha de raciocionio do toledo modifiquei meu codigo e fazendo o conforme ele falou assim obtendo exito
agradeço a todos que se empenharam a me ajudar

att: Nascimento

Setar foco no getbox e voltar a funçao que a chamou

Enviado: 07 Out 2015 20:08
por asimoes
Nascimento,

No código do mestre Toledo, se você informar que quer alterar Sim e depois se voltar no Qual número e em seguida informar que Não quer alterar, o getbox cnonbre fica disable e não sai com enter, é isso mesmo que você quer? ao meu ver o setfocus deve ir para o campo seguinte.

Se for este o caso:
Ficaria assim esse trecho:

Código: Selecionar todos

      if msgyesno("Deseja Trocar o Nome ?","Sim Não",.t.)
            Altera = "S"
           form_1.cNonbre.Enabled:= .t.
           form_1.cNonbre.Setfocus
           return .t.
      else
           form_1.cNonbre.Enabled:= .f.
           form_1.ddata.setfocus
      endif

Setar foco no getbox e voltar a funçao que a chamou

Enviado: 08 Out 2015 19:37
por Nascimento
exato assimoes ja fiz as correçoes no soft, porque esse era apenas um demo do problema
muito obrigado a voce e a todos que ajudaram nessa empreitada,

é que estou portando um soft meu console para minigui e observo que algumas funçoes saem da ordem escrita no modo console para a minigui mais
com persistencia testes e a ajuda desse maravilhoso forum e seus menbros
vamos caminhando!

att: Nascimento