Desenvolvimento

1 mar, 2007

Criando mensagens para os usuários

Publicidade

É sempre assim. Basta a Microsoft fazer a revisão do layout dos seus produtos e todos os clientes começam a pedir nossos sistemas neste mesmo perfil achando que montar o layout de uma aplicação pode ser feito rapidamente.

Algumas novas funcionalidades são muito interessantes, como aquele pequeno aviso de novo e-mail do Outlook. Discreto e ao mesmo tempo informativo ele pode ser muito útil em vários momentos do nosso sistema. Para termos um processo semelhante podemos usar uma função presente na API do Windows chamada SetLayeredWindowAttributes que permite alterar a transparência de uma form, dando o efeito aparecer/desaparecer semelhante ao do Outlook.

Observe o fonte para criarmos este efeito:

alerta=CREATEOBJECT("alerta")
alerta.mensagem("O backup foi realizado com sucesso.")

DEFINE CLASS alerta AS form
	Height = 120
	Width = 375
	ShowWindow = 2
	BorderStyle = 0
	Caption = ""
	TitleBar = 0
	AlwaysOnTop = .T.
	BackColor = RGB(14,173,241)
	Name = "alerta"

	ADD OBJECT edtmensagem AS editbox WITH ;
		FontSize = 20, ;
		Alignment = 2, ;
		BackStyle = 0, ;
		BorderStyle = 0, ;
		Height = 103, ;
		Left = 2, ;
		ScrollBars = 0, ;
		Top = 3, ;
		Width = 370, ;
		IntegralHeight = .T., ;
		Name = "edtmensagem"


	PROCEDURE visualizar
		PARAMETERS m.lnAção as Integer 
		LOCAL m.lnInicio as Integer, m.lnFim as Integer, m.lnStep as Integer 
		m.lnInicio=IIF(m.lnAção=1,10,255)
		m.lnFim=IIF(m.lnAção=1,255,0)
		m.lnStep=IIF(m.lnAção=1,10,-10)
		FOR m.loop1=m.lnInicio TO m.lnFim STEP m.lnStep
			INKEY(.01,"H")
			_Sol_SetLayeredWindowAttributes(THISFORM.hWnd, 0, m.loop1, 2)
		ENDFOR
	ENDPROC


	PROCEDURE mensagem
		PARAMETERS m.lcmensagem
		thisform.edtmensagem.Value=m.lcmensagem
		thisform.Visible=.t.
		_Sol_SetLayeredWindowAttributes(THISFORM.hWnd, 0, 10, 2)
		thisform.visualizar(1)
		INKEY(2)
		thisform.visualizar(0)
		_Sol_SetLayeredWindowAttributes(THISFORM.hWnd, 0, 0, 2)
		thisform.Visible=.f.
	ENDPROC


	PROCEDURE Init
		zoom window alerta max
		m.lnHeight=this.Height
		m.lnWitdh=this.Width 
		zoom window alerta normal
		this.left=m.lnWitdh-375-10
		this.top=m.lnHeight-120+20
		DECLARE SetWindowLong In Win32Api AS _Sol_SetWindowLong Integer, Integer, Integer
		DECLARE SetLayeredWindowAttributes In Win32Api AS _Sol_SetLayeredWindowAttributes Integer, String, Integer, Integer
		_Sol_SetWindowLong(THISFORM.hWnd, -20, 0x00080000)
		_Sol_SetLayeredWindowAttributes(THISFORM.hWnd, 0, 0, 2)
	ENDPROC


ENDDEFINE

Note que o mais importante pode ser encontrado no procedimento visualizar que contém o código necessário para o efeito proposto.

A forma com que você desejar programar este processo pode ser das mais variadas, mas uma das melhores é criar um pequeno executável que passe como parâmetro a informação que deseja informar ao usuário, pois assim o trabalho normal do software não será interrompido, caso contrário, pela falta de execução simultânea do VFP, o usuário não poderia utilizar nada até a mensagem ser apagada.

Bom divertimento.