Página 1 de 1
Textbox perdendo foco
Enviado: 25 Abr 2015 17:14
por Nascimento
Amigos estou com um soft que estou portando pra minigui mais uma das resalvas do dono é que use minimamente mouse, entao bolei o uso de um menu estilo antigo (clipper) com letras indo tudo normal , mais observei que ao minimizar percebi que o menu perde o foco ja tentei varios meios mais nao consegui
montei um pequeno exemplo para facilitar o entendimento dos amigos
agradeço desde já qq ajuda
att: Nascimento
segue o exemplo do cod abaixo:
Código: Selecionar todos
#include "minigui.ch"
Function Main()
define window Main_form ;
at 0,0;
width getdesktopwidth();
height getdesktopheight();//- 30;
main;
nosize;
backcolor {0,0,0}
define window j_menu;
row 2;
col 5;
width 290;
height 300;
windowtype panel;
nosize;
backcolor {240,240,240}
* TITULO DA PRIMEIRA JANELA
define label label_nome_sistema
col 0
row 0
width j_menu.width
height 30
value 'MENU INICIAL'
centeralign .T.
fontname 'verdana'
fontsize 14
fontcolor BLACK
fontbold .F.
transparent .F.
backcolor {149,202,255}
end label
* OPÇOES DO MENU 1
define label label_opcao_1
col 10
row 30
value '[ C ] CADASTRAR ALUNO '
autosize .T.
fontname 'courier new'
fontsize 12
fontbold .F.
fontcolor {128,128,128}
transparent .T.
end label
define label label_opcao_2
col 10
row 55
value '[ A ] ALTERAR CADASTRO '
autosize .T.
fontname 'courier new'
fontsize 12
fontbold .F.
fontcolor {128,128,128}
transparent .T.
end label
@ 320,010 textbox tbox_escolha;
height 20;
width 20;
font 'courier new' size 12;
maxlength 1;
uppercase;
backcolor {240,240,240};
on change menu_escolha();
noborder
end window
end window
Main_form.Center
Main_form.Activate
return nil
*********************************
function menu_escolha()
local opcao := j_menu.tbox_escolha.value
do case
case opcao == ''
return (nil)
case opcao == 'C'
msginfo('Cadastro')
case opcao == 'A'
msginfo('Altera')
otherwise
msginfo('Tecla Invalida')
end case
setproperty('j_menu','tbox_escolha','value','')
j_menu.tbox_escolha.setfocus
return (nil)
Textbox perdendo foco
Enviado: 26 Abr 2015 09:34
por Toledo
Nascimento, faz o seguinte:
Incluir ON GOTFOCUS na definição da janela:
Código: Selecionar todos
define window Main_form ;
at 0,0;
width getdesktopwidth();
height getdesktopheight();//- 30;
main;
nosize;
backcolor {0,0,0};
on gotfocus {|| Rest_Focus() }
Incluir no PRG a função Rest_Focus():
Código: Selecionar todos
Function Rest_Focus()
DoMethod("j_menu","tbox_escolha","SetFocus")
Return Nil
Abraços,
Textbox perdendo foco
Enviado: 28 Abr 2015 09:16
por Nascimento
Amigo Toledo Ficou Perfeito agora so tem mais essa etapa a resolver preciso de um menu e um submenu , fiz um demo
sao as funçoes mais usadas que o dono quase que exigiu que fossem pelo teclado como era antes o restante pode ser icones e uso de mouse
bom é quase o mesmo problema se eu abrir o submenu e minimizar da erro segue o demo abaixo
Código: Selecionar todos
#include "minigui.ch"
Function Main()
define window Main_form ;
at 0,0;
width getdesktopwidth();
height getdesktopheight();//- 30
main;
nosize;
backcolor {0,0,0};
on gotfocus {|| Rest_Focus() }
define window j_menu;
row 2;
col 5;
width 200;
height 150;
windowtype panel;
nosize;
backcolor {240,240,240}
* TITULO DA PRIMEIRA JANELA
define label label_nome_sistema
col 0
row 0
width j_menu.width
height 30
value 'MENU INICIAL'
centeralign .T.
fontname 'verdana'
fontsize 14
fontcolor BLACK
fontbold .F.
transparent .F.
backcolor {149,202,255}
end label
* OPÇOES DO MENU 1
define label label_opcao_1
col 10
row 30
value '[ C ] CADASTRAR ALUNO '
autosize .T.
fontname 'courier new'
fontsize 10
fontbold .F.
fontcolor {128,128,128}
transparent .T.
end label
define label label_opcao_2
col 10
row 55
value '[ A ] ALTERAR CADASTRO '
autosize .T.
fontname 'courier new'
fontsize 10
fontbold .F.
fontcolor {128,128,128}
transparent .T.
end label
define label label_opcao_3
col 10
row 75
value '[ S ] SUBMENU '
autosize .T.
fontname 'courier new'
fontsize 10
fontbold .F.
fontcolor {128,128,128}
transparent .T.
end label
@ 320,010 textbox tbox_escolha;
height 20;
width 20;
font 'courier new' size 12;
maxlength 1;
uppercase;
backcolor {240,240,240};
on change menu_escolha();
noborder
end window
end window
Main_form.Center
Main_form.Activate
return nil
*********************************
function menu_escolha()
local opcao := j_menu.tbox_escolha.value
do case
case opcao == ''
return (nil)
case opcao == 'C'
msginfo('Cadastro')
case opcao == 'A'
msginfo('Altera')
case opcao == 'S'
submenu()
otherwise
msginfo('Tecla Invalida')
end case
setproperty('j_menu','tbox_escolha','value','')
j_menu.tbox_escolha.setfocus
return (nil)
**************************
Function Rest_Focus()
DoMethod("j_menu","tbox_escolha","SetFocus")
Return Nil
***********************************************
function Submenu()
define window j_menu1;
row 110;
col 50;
width 200;
height 150;
windowtype CHILD;
nosize;
nocaption;
backcolor {240,240,240}
* TITULO DA PRIMEIRA JANELA
define label label_nome_sistema
col 0
row 0
width j_menu1.width
height 30
value 'SUBMENU'
centeralign .T.
fontname 'verdana'
fontsize 14
fontcolor BLACK
fontbold .F.
transparent .F.
backcolor {149,202,255}
end label
* OPÇOES DO MENU 1
define label label_opcao_1
col 10
row 30
value '[ M ] MATRICULAS '
autosize .T.
fontname 'courier new'
fontsize 10
fontbold .F.
fontcolor {128,128,128}
transparent .T.
end label
define label label_opcao_2
col 10
row 55
value '[ C ] CONSULTAR '
autosize .T.
fontname 'courier new'
fontsize 10
fontbold .F.
fontcolor {128,128,128}
transparent .T.
end label
@ 320,010 textbox tbox_escolha1;
height 20;
width 20;
font 'courier new' size 10;
maxlength 1;
uppercase;
backcolor {240,240,240};
on change menu1_escolha();
noborder
end window
j_menu1.Activate
return (nil)
*****************************************
function menu1_escolha()
local opcao := j_menu1.tbox_escolha1.value
do case
case opcao == ''
return (nil)
case opcao == 'M'
msginfo('Consultar')
case opcao == 'C'
msginfo('Consultar')
otherwise
msginfo('Tecla Invalida')
end case
setproperty('j_menu1','tbox_escolha','value','')
j_menu1.tbox_escolha1.setfocus
return (nil)
So preciso que ao minimizar esse submenu seja automaticamente fechado ...
agradeço desde ja
att: Nascimento
Textbox perdendo foco
Enviado: 29 Abr 2015 09:32
por Nascimento
Ainda nao consegui uma soluçao plausivel..

Textbox perdendo foco
Enviado: 29 Abr 2015 13:38
por Toledo
Nascimento, tentei aqui várias soluções, mas nenhum deu o resultado esperado. No código abaixo fiz várias alterações tentando encontrar uma solução, até que funciona, mas se o submenu for aberto, ai não tem como minimizar pelo botão da janela principal. Minimiza apenas se clicar no botão do programa que está na barra do menu iniciar do Windows.
Código: Selecionar todos
#include "minigui.ch"
Function Main()
Private nNivelMenu:=1
define window Main_form ;
at 0,0;
width getdesktopwidth();
height getdesktopheight();//- 30
main;
nosize;
backcolor {0,0,0};
on gotfocus {|| Rest_Focus() }
define window j_menu;
row 2;
col 5;
width 200;
height 150;
windowtype panel;
nosize;
backcolor {240,240,240}
* TITULO DA PRIMEIRA JANELA
define label label_nome_sistema
col 0
row 0
width j_menu.width
height 30
value 'MENU INICIAL'
centeralign .T.
fontname 'verdana'
fontsize 14
fontcolor BLACK
fontbold .F.
transparent .F.
backcolor {149,202,255}
end label
* OPÇOES DO MENU 1
define label label_opcao_1
col 10
row 30
value '[ C ] CADASTRAR ALUNO '
autosize .T.
fontname 'courier new'
fontsize 10
fontbold .F.
fontcolor {128,128,128}
transparent .T.
end label
define label label_opcao_2
col 10
row 55
value '[ A ] ALTERAR CADASTRO '
autosize .T.
fontname 'courier new'
fontsize 10
fontbold .F.
fontcolor {128,128,128}
transparent .T.
end label
define label label_opcao_3
col 10
row 75
value '[ S ] SUBMENU '
autosize .T.
fontname 'courier new'
fontsize 10
fontbold .F.
fontcolor {128,128,128}
transparent .T.
end label
end window
_DefineHotKey ( "j_menu" , 0 , Asc("A") , {|| MsgInfo("Alterar")} )
_DefineHotKey ( "j_menu" , 0 , Asc("C") , {|| MsgInfo("Cadastro")} )
_DefineHotKey ( "j_menu" , 0 , Asc("S") , {|| submenu() } )
end window
Main_form.Center
Main_form.Activate
return nil
*********************************
Function Rest_Focus()
If nNivelMenu==1
DoMethod("j_menu","label_opcao_1","SetFocus")
ElseIf nNivelMenu==2
DoMethod("j_menu1","label_opcao_1","SetFocus")
Endif
Return Nil
***********************************************
function Submenu()
nNivelMenu:=2
define window j_menu1;
row 110;
col 50;
width 200;
height 150;
windowtype Child;
nosize;
nocaption;
backcolor {240,240,240}
* TITULO DA PRIMEIRA JANELA
define label label_nome_sistema
col 0
row 0
width j_menu1.width
height 30
value 'SUBMENU'
centeralign .T.
fontname 'verdana'
fontsize 14
fontcolor BLACK
fontbold .F.
transparent .F.
backcolor {149,202,255}
end label
* OPÇOES DO MENU 1
define label label_opcao_1
col 10
row 30
value '[ M ] MATRICULAS '
autosize .T.
fontname 'courier new'
fontsize 10
fontbold .F.
fontcolor {128,128,128}
transparent .T.
end label
define label label_opcao_2
col 10
row 55
value '[ C ] CONSULTAR '
autosize .T.
fontname 'courier new'
fontsize 10
fontbold .F.
fontcolor {128,128,128}
transparent .T.
end label
end window
_DefineHotKey ( "j_menu1" , 0 , Asc("M") , {|| MsgInfo("Matriculas")} )
_DefineHotKey ( "j_menu1" , 0 , Asc("C") , {|| MsgInfo("Consulta")} )
_DefineHotKey ( "j_menu1" , 0 , VK_ESCAPE , {|| nNivelMenu:=1, j_menu1.release } )
j_menu1.Activate
return (nil)
Abraços,
Textbox perdendo foco
Enviado: 29 Abr 2015 15:46
por Nascimento
Mestre Toledo eu consegui de uma certa maneira nao sei se digamos a correta, consegui ao minimizar fechar o submenu
vou testar esse seu modo o que ficar melhor eu ponho em uso , pq como eu falei as vezes ficamos preso em algum
estilo clipper por conta de donos de firmas e operadores estarem acostumados em hotkey,
hum amigo meu me disse assim "Não se prenda ao modo clipper de programar"
sim ele esta totalmente certo mais no final quem manda é o patrão e as vezes tentamos convencer quando nao tem jeito temos que bolar um jeito rsrs se não o cara perde a bolacha ,
muito obrigado mais uma vez amigo toledo daqui em vante da pra caminhar com essa migração breve estarei postando
telas de antes e depois...
Textbox perdendo foco
Enviado: 29 Abr 2015 21:25
por Nascimento
bom mais uma digamos etapa vencida agora surgiu uma duvida
exemplo: quando queremos adicionar um cadastro é simples pega os value(s) etc etc
da um replace
agora pra uma alteraçao vai buscar na dbf e preenche o textbox ou getbox como isso é feito na minigui ?
caso esteja dificil a compreençao da pergunta monto um pequeno exemplo para facilitar o entendimento dos amigos
att: Nascimento
Textbox perdendo foco
Enviado: 29 Abr 2015 22:34
por Toledo
Nascimento escreveu:quando queremos adicionar um cadastro é simples pega os value(s)
Nascimento escreveu:uma alteraçao vai buscar na dbf e preenche o textbox ou getbox como isso é feito na minigui ?
É o contrário do exemplo acima:
Abraços,
Textbox perdendo foco
Enviado: 30 Abr 2015 01:10
por Nascimento
Amigo Toledo compreendido e ja feito com sucesso agora eu fiz a funçao que grava os dados
mais digamos que eu queira cancelar a gravaçao e voltar ao primeiro textbox tirando o foco do button
eu consegui voltar pra o textbox desejado so o cursor fica piscando e nao entra dados porque pelo que acho é que o foco continua no button
bom alterei um exemplo que tem no samples para mostrar o meu problema estou postando ele abaixo
Código: Selecionar todos
/*
MINIGUI - Harbour Win32 GUI library Demo/Sample
*/
request dbfcdx
#include "minigui.ch"
STATIC cName, cStreet1, cStreet2, cCity, cState, cZipcode, lOk:=.f.
/****************************************************************************/
FUNCTION Main()
LOCAL nWidth:=58, nHeight:=22, n:=2, ;
nCol:=ColCharToPix(1)+GetBorderWidth()/2, ;
nCtrlW:=ColCharToPix(40.5), nCtrlH:=RowCharToPix(1.4)
rddsetdefault("DBFCDX")
cName:=space(40)
cStreet1:=cStreet2:=cCity:=space(40)
cState:=space(2)
cZipcode:=space(5)
if !file('nome.dbf')
priv lix:={}
aadd(lix,{"NOME" ,"C", 40,0})
aadd(lix,{"SNOME" ,"C", 40,0})
dbcreate("Nome.dbf",lix)
endif
use Nome alias nome new shared
if !file('Nome.cdx')
index on nome tag nome to nome
endif
set index to nome
Set Font To "Courier", 10
Define Window f1 ;
At 0, 0 ;
Width ColCharToPix(nWidth) ;
Height RowCharToPix(nHeight)+GetBorderHeight()/iif(IsWinXP(),.5,2) ;
Title "Enter Form" ;
Icon "demo2.ico" ;
Main ;
On Maximize ( f1.width:=ColCharToPix(nWidth), ;
f1.height:=RowCharToPix(nHeight)+GetBorderHeight()/iif(IsWinXP(),.5,2) ) ;
Nosize
@RowCharToPix(1),nCol label l1 value "Enter Name " font "MS Sans Serif" size 8
@RowCharToPix(1)-n,LenChartopix(f1.l1.value) getbox cName value cName picture "@!" ;
width nCtrlW height nCtrlH ;
valid {|| CheckEmpty((cName:=f1.cName.value),"You must enter a name")}
@RowCharToPix(4)-n,nCol label l2 value "Enter street 1" font "MS Sans Serif" size 8
@RowCharToPix(4)-2*n,LenChartopix(f1.l2.value) getbox cStreet1 value cStreet1 ;
width nCtrlW height nCtrlH PICT '@!'
Define Button b1
row f1.height-60-iif(IsWinXP(),GetBorderHeight(),0)
col nCol
width ColCharToPix(9)
height RowCharToPix(1.65)
caption "&Ok"
fontname "MS Sans Serif"
fontsize 8
action ( !Empty(cName),grava())
End Button
Define Button b2
row f1.height-60-iif(IsWinXP(),GetBorderHeight(),0)
col nCol + f1.b1.width + 10
width ColCharToPix(9)
height RowCharToPix(1.65)
caption "&Cancel"
fontname "MS Sans Serif"
fontsize 8
action f1.release()
End Button
On Key ESCAPE Action f1.b2.onclick()
End Window
Center Window f1
Activate Window f1
RETURN(NIL)
/****************************************************************************/
#define MsgAlert( c ) MsgEXCLAMATION( c, "Attention" )
function grava
if msgyesno('Confirma as informaçoes')
select nome
goto top
cName:=ltrim(f1.cName.value)
sbnome:=ltrim(f1.cStreet1.value)
seek cName
if found()
if flock()
replace nome with cname
replace snome with sbnome
endif
dbcommit()
unlock
else
if flock()
append blank
replace nome with cname
replace snome with sbnome
endif
dbcommit()
unlock
endif
else
f1.cName.value := "" // AQUI EU LIMPO O GETBOX
f1.cname.setfocus // AQUI EU CONSIGO VOLTAR AO GETBOX MAIS NAO ESCREVO NADA MAIS
RETURN NIL
endif
/****************************************************************************/
STATIC FUNCTION CheckEmpty(cVar, cMsg)
LOCAL lRetVal:=.t.
if empty(cVar).And.!(f1.focusedcontrol=="b2")
MsgAlert(cMsg)
lRetVal:=.f.
else
select nome
chave := ltrim(f1.cName.value)
seek chave
if found()
if msgyesno('Deseja Alterar')
f1.cStreet1.value:= nome->nome
lRetVal:= .T.
else
lretval:= .f.
endif
endif
endif
RETURN(lRetVal)
/****************************************************************************/
Static Function IsWinXP()
Return _HMG_IsXP
/*
*/
Static Function RowCharToPix( nValor )
Return nValor*14
/*
*/
Static Function ColCharToPix( nValor )
Return nValor*8
Static Function LenChartopix( cText )
Return ColChartopix( len( cText )+1 )
Textbox perdendo foco
Enviado: 30 Abr 2015 06:51
por Toledo
Nascimento, mude a linha 118 para:
Não testei, mas acho que vai funcionar.
Abraços,
Textbox perdendo foco
Enviado: 30 Abr 2015 09:29
por Nascimento
perfect mais uma vez muito obrigado , são ate digamos ("coisas Bobas") mais o custume digamos do jeito clipper de ser da um entrave rsrs
Textbox perdendo foco
Enviado: 04 Mai 2015 17:09
por Nascimento
amigos mais uma pequena duvida
inicial mente começo com o getbox invisivel dependendo da validaçao do primeiro ele torna-se visivel
como fazer isso
@ 100 ,150 getbox hora_alu value hora_alu ;
backcolor{255,255,200};
width 55 height nCtrlH bold pict "99:99";
invisible // aqui ele inicia invisivel como mudar esse status ?
Textbox perdendo foco
Enviado: 04 Mai 2015 19:39
por Toledo
Amigo, tente o seguinte:
Abraços,