É 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.