É 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
ENDDEFINENote 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.
Olha eu aqui de novo... Nós também temos uma janela de aviso parecida com a sua. Mas você não precisa criar um exe para funcionar paralelo a sua aplicação: basta estar setada como 'ShowWindow' = 'as top level' e ser chamada com DO FORM nome_do_form. Outra solução para mensagens como esta é usar uma classe que coloca sua aplicação em Vfp no Systray, e que tenha funções de mensagens naqueles balões amarelos...
Já existe uma classe nativa a partir do Vfp 8, que se encontra em ...\microsoft Visual Foxpro 9\Samples\Soluction\Toledo\Systray.vcx
. É uma boa alternativa, além de ser mais leve do que um form com efeitos de transparencia.
Abraços Fabiano!
Obrigado pelos comentários. Observe que como é uma mensagem que leva cerca de 10 a 15 segundos para ser visualizada e removida, este ciclo faz com que outras rotinas não possam ser executadas, pois existe um loop for na mesma. Por isso a questão de outro exe. A forma mais simples e leve de fazer uma comentário para o usuário também acho que é o messagebox :). Mas a questão que desejei abordar é que muitos reclamam que um software tem isso ou aquilo e no fox não tem. Na verdade tem, basta arregaçar as mangas.
Responder comentárioGostei do exemplo, principalmente porque mostra o uso de APIs do Windows, assunto que sou iniciante ainda, só me pergunto onde você consegue as informações sobre APIs do Windows e o significado de seus parâmetros.
Responder comentárioObrigado pelo comentário.
Esta documentação é direcionada para o Visual Fox Pro, mas como o VFP tem uma sintaxe muito clara, você pode usa-la para qualquer linguagem: http://www.news2news.com/vfp/index.php
Os textos publicados neste espaço são de responsabilidade única de seus autores (colunistas e leitores) e podem não expressar necessariamente a opinião do iMasters.
2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.