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)

Código: Selecionar todos

cCodigo:=NomeForm.NomeObjeto.Value
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:

Código: Selecionar todos

NomeForm.NomeObjeto.Value:=ALIAS->CODIGO
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:

Código: Selecionar todos

f1.cName.value :=space(40)
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:

Código: Selecionar todos

NomeForm.hora_alu.Show
Abraços,