Bom Dia Cristal_Glass!
Crie um formulário em branco e remova a borda do mesmo e coloque para iniciar minimizado.
Feito isto, adicione os seguintes componentes:
1 timer
1 notifyIcon e
1 contextMenuStrip
após adicionar os componentes acima, crie quatro variáveis globais com o seguinte nomes e tipo de prefência:
três variáveis do tipo Int
Int32 segundos, minutos, milisegundos;
e uma do tipo DateTime
DateTime dataHora;
Ainda no formulário, no evento Resize
private void Form1_Resize(object sender, EventArgs e) { //verifica se o formulario esta minimizado if (this.WindowState == FormWindowState.Minimized) { //esconde o formulário this.Hide(); //deixa o aviso visivel notifyIcon1.Visible = true; } }
agora no componente contextMenuStrip
adicione um menu no mesmo com o nome desejado e dê duplo clique no menu para ativar um evento, no meu caso, ficou assim:
private void abrirToolStripMenuItem_Click(object sender, EventArgs e) { //para abrir o formulário form1 mesmo, no seu caso, para você seria a tela de login ou o principal, ou outra tela mesmo new Form1().Show(); }
agora no componente notifyIcon
no notifyIcon, vá na propriedade ContextMenuStript e selecione o contextMenuStrip
criado anteriormente.
vá na propriedade BallonTipIcon e selecione a que melhor se adequar (Info,Warning ou Error).
e na propriedade Icone do notify, coloque um icone desejado.
vá em Eventos do notifyIcon e dê duplo click sobre o evento MouseDoubleClick
private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) { //irá exibir o formulário (neste caso o form1) em seu caso, pode ser a tela de login ou o principal, não sei como está a aplicação ai... this.Show(); //o formulario irá iniciar maximizado this.WindowState = FormWindowState.Maximized; //oculta o aviso notifyIcon1.Visible = false; }
Agora no componente timer, vá na propriedade enable
e altere para true e depois em evento, dê duplo click sobre o evento Tick
ou se preferir, dê duplo click sobre o timer.
No evento Tick do timer, ficou assim:
`private void timer1_Tick(object sender, EventArgs e)
{
//data e a hora do sistema. é possivel pegar a data do servidor para evitar possiveis conflitos,
//pois a data da maquina local, pode estar alterada e tals…
//para buscar a data do sistema, faça uma consulta do tipo:
//select GETDATE() mais detalhes no tópico da msdn, link abaixo…
dataHora = DateTime.Now;
//variavel recebe o minuto do sistema
minutos = dataHora.Minute;
//variavel recebe o segundo do sistema
segundos = dataHora.Second;
//variavel recebe o milisegundo do sistema
milisegundos = dataHora.Millisecond;
//Para ficar melhor ainda, e mostrar para o usuário, quantos boletos tem para vencer, faça uma consulta
//do tipo Count para contar quantos boletos tem para vencer dentro de 10 dias e é claro, para não ficar mostrando a mensagem
//toda vez que atender o critério mesmo não tendo boleto a vencer!.
//a consulta abaixo, utilizei o BETWEEN, entre datas, para comparar datas... neste caso a atual e a daqui a dez dias...
//Select COUNT(*) fROM BoletoVencer Where DataVencimento BETWEEN @DataAtual AND @DataDezMais
int qtdVencer = Convert.ToInt32(this.boletoVencerTableAdapter.ContarBoletoVencer(dataHora.Date,dataHora.AddDays(+10)));
//verifica se tem boletos a vencer
if (qtdVencer > 0)
{
if (minutos == 57 && segundos == 10 && milisegundos >= 600)
{
//exibe o icone
notifyIcon1.Visible = true;
//texto a ser exibido da notificação
notifyIcon1.Text = "ATENÇÃO";
//titulo da mensagem
notifyIcon1.BalloonTipTitle = "Boletos a Vencer!";
//texto da mensagem
if (qtdVencer > 1)
{
notifyIcon1.BalloonTipText = "Possui " + qtdVencer.ToString() + " boletos à vencer dentro de Dez Dias";
}
else
{
notifyIcon1.BalloonTipText = "Possui " + qtdVencer.ToString() + " boleto à vencer dentro de Dez Dias";
}
//o tempo em que ficara sendo exibido
notifyIcon1.ShowBalloonTip(1000);
}
}
}`
GetDate