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