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

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

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

Mensagem 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
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

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

Mensagem por asimoes »

Nascimento,

Qual é a função que você quer o foco do getbox de volta? é isso?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

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

Mensagem 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
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

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

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

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

Mensagem 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"

:%
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

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

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

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

Mensagem 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.

***********************************************
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

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

Mensagem 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.

***********************************************
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

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

Mensagem 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
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

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

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

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

Mensagem 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
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Responder