Como saber se o aplicativo está Minimizado?

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Como saber se o aplicativo está Minimizado?

Mensagem por rochinha »

Amiguinhos,

Como o Jairo Maia disse que resolveu acho que o tópico esta quase finalizado, mas vou dar mais uma pequena dica que uso em um aplicativozinho que monitora as vendas nos terminais e quando elas são finalizadas um aviso sonoro e uma pequena telinha, quase parecida com a do Outlook 2007 avisa a maquina no caixa que tem pedido para ser impresso.

Somente um pequeno trecho e não será funcional pois usa funções do Fivewin, mas a idéia dá pra captar e implementar.

Código: Selecionar todos

static oWnd

function Main()
   DEFINE WINDOW oWnd TITLE "Botao Iniciar"
          DEFINE BUTTONBAR oBar _3D OF oWnd
		  ...
          DEFINE BUTTON OF oBar ACTION Pisca_EXE()
		  DEFINE BUTTON OF oBar ACTION BallonMSG( "Mensagem Nova Chegou", 4 )
   ACTIVATE WINDOW oWnd 
   return nil

Function BallonMSG(cBallonMsg,nBallonTime)
   local oDlgBallon, oBrush
   default cBallonMsg := "Nova mensagem chegando..."
   DEFINE WINDOW oDlgBallon ;
          FROM GetSysMetrics(1),GetSysMetrics(0)-300 TO 200,200 PIXEL ;
          COLOR nRGB(255,255,255),nRGB(250,250,250) NO CAPTION BORDER NONE
          @ 5, 5 GET cBallonMsg MEMO OF oDlgBallon SIZE 195,195 PIXEL COLOR nRGB(000,000,000),nRGB(250,250,250) NOBORDER NO MODIFY NO VSCROLL
   ACTIVATE WINDOW oDlgBallon ON INIT MoveDLG(oDlgBallon,nBallonTime)
   return nil

Function MoveDLG(oDlgBallon,oDlgTime)
   oDlgAltura := GetSysMetrics(1)
   //SndPlaySound( cPath + "\pnsrv.wav", 0 )
   for i = 1 to 20
       oDlgAltura := oDlgAltura - i
       oDlgBallon:Move( oDlgAltura, 100, 200, 200, .t. )
       SysWait(.02)
   next
   SysWait(oDlgTime)
   for i = 1 to 20
       oDlgAltura := oDlgAltura + i
       oDlgBallon:Move( oDlgAltura, 100, 200, 200, .t. )
       SysWait(.02)
   next
   oDlgBallon:end()
   return
A idéia está na funcção MoveDLG() que faz surgir de baixo para cima uma janela que se move, mostrando a mensagem por (oDlgTime)segundos.

As funções GetSysMetrics(1) e GetSysMetrics(0) devolvem altura e largura da tela conforme sua resolução, portanto bastará usarem alguma função parecida.

O laço for i = 1 to 20 move a janela 20 pixels para cima e depois para baixo.

A janela oWnd é a principal, que pode ficar minimizada ou escondida e a oDlgBallon é a janela que irá aparecer e desaparecer na frente do usuário.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Como saber se o aplicativo está Minimizado?

Mensagem por janio »

Se o Jairo ainda quiser deixar os usuarios desse sistema dele babando (hehehe), além de piscar o exe na barra de tarefas, ele pode incluir a exibição de uma notificação a cada vez q chega uma msg, subindo do tray, proximo ao relogio do windows, que fica visivel por n segundo ae some, igual aquelas notificações de atualização de antivirus!

O Basso, mestre na hwgui, mim passou esse codigo uma época dessas!

Imagem


Notificacao("bla bla bla bla bla",nSegundos)

Código: Selecionar todos

/*--------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------*/

FUNCTION Notificacao(cmensagem,nTime, loem, lAlertar )
PRIVATE oAlert, oEdtMensagem

  DEFAULT lOem     := .F.
  DEFAULT lAlertar := .F.
  DEFAULT nTime    := 3000 // tempo exibicao da mensagem
  
  INIT DIALOG oAlert  TITLE "Alerta" ;
     AT 0,0 SIZE 375,130 ;
     STYLE WS_CAPTION+WS_POPUP ;
 	  ON GETFOCUS {||mensagem(cMensagem,lOem, lAlertar, nTime ),oAlert:close()};
     ON INIT {|O| FormInit(OALERT)  }
     
	ACTIVATE DIALOG oAlert NOMODAL
  
 RETURN Nil	

	STATIC FUNCTION visualizar
		PARAMETERS nAcao
		
		LOCAL nInicio, nFim, nStep, nLoop1
		
		nInicio := IIF(nAcao = 1, 10,255)
		nFim := IIF(nAcao = 1, 255,0)              
		nStep := IIF(nAcao = 1, 10,-10)
		FOR nloop1 = nInicio TO nFim STEP nStep
			//INKEY(.025)
			millisec(25)
			SetLayeredWindowAttributes(oAlert:handle, nloop1) //0,nloop1, 2)
		NEXT
	RETURN Nil


	STATIC FUNCTION mensagem
		PARAMETERS cmensagem,loem, lAlertar, nTime
		
		cMensagem := IIF(loem,HB_OEMTOANSI(cMensagem),cMensagem)
		oAlert:show() //thisform.Visible=.t.
		SetLayeredWindowAttributes(oAlert:handle, 10) //0, 10, 2)
    
    @ 0,0 SAY oEdtMensagem CAPTION cmensagem SIZE oalert:nwidth,oalert:nheight;
      FONT HFont():Add( 'Verdana',0,-24,400,,,)  ;
      COLOR IIF( !lAlertar, RGB(32,32,32),16777215)    ;
      BACKCOLOR IIF( !lAlertar, RGB(14,173,241), 4079359 );
      STYLE ES_CENTER

 		visualizar(1)
		millisec(nTime)
		visualizar(0)
		SetLayeredWindowAttributes(oAlert:handle, 0) //, 0, 2)
		oAlert:hide()  //isform.Visible=.f.
  
	RETURN NIL

																							 
	STATIC FUNCTION FormInit
		#define WS_EX_LAYERED  524288   

    private oldstyle,newstyle		                           
    oAlert:hide()                                        
		//oAlert:maximize() //zoom window alerta max
		nHeight := GETDESKTOPHEIGHT() //(oMain:nHeight
		nWitdh := GETDESKTOPWIDTH() //oMain:nWidth 
		//oAlert:restore() //zoom window alerta normal
		oAlert:nleft := nWitdh - 375 - 15
		oAlert:ntop := nHeight - 180 + 20
    oldstyle = HWG_GetWindowexSTYLE(oAlert:hANDLE)  
    NEWSTYLE = Hwg_BitOR( OLDstyle,WS_EX_LAYERED+WS_EX_TRANSPARENT)
    HWG_SETWINDOWEXSTYLE(oAlert:hANDLE, NEWstyle)
		moveWINDOW(oalert:handle,oAlert:nleft,oAlert:nTop-10)
		SetLayeredWindowAttributes(oAlert:handle, 0) //, 0, 2)
    SETTOPMOST(oAlert:handle)
	RETURN NIL

STATIC Function SetLayeredWindowAttributes
parameters hwnd,ntransp
Private nResult
#define DC_CALL_STD 0x0020
#define LWA_COLORKEY 0x1
#define LWA_ALPHA 0x2

 nResult := DllCall("user32.dll" , 	DC_CALL_STD , "SetLayeredWindowAttributes" , hwnd,0 , ntransp,LWA_ALPHA    ) 
RETURN NIL

/*--------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------*/
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Como saber se o aplicativo está Minimizado?

Mensagem por Jairo Maia »

Legal Jãnio, vou tentar assim que puder e volto com o resultado. Valeu.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Responder