News & Events
Tutorial: Notificações no Windows 10 com Delphi 10 Seattle
- 1 de dezembro de 2015
- Posted by: Adriano Santos
- Category: delphi DX Notícias RX [Tutorial]
Certamente você está totalmente familiarizado com as notificações em seu smartphone ou tablet não é mesmo? Sim, os famosos Push Notifications (Notificações Push) que são disparados sempre que alguma mensagem chega em nosso dispositivo. Pois isso chegou ao Windows 10 e é bastante fácil de se criar utilizando o Delphi 10 Seattle.
As notificações são interessantes para diversos momentos do ciclo de vida de nossos aplicativos. Um exemplo bastante popular e que é interessante para o usuário que façamos essa implementação é quando notificamos ele em background de que alguma tarefa no software solicitada por ele anteriormente, foi concluída: um pedido de um relatório demorado por exemplo.
Notificações no Windows 10 com Delphi 10 Seattle
Quantos de seus usuários geram relatórios em seus sistemas que demoram uma eternidade para serem concluídos? O ideal é que pudéssemos disparar a produção do relatório, liberássemos a janela para que o usuário continuasse a fazer outras tarefas e depois de concluído o relatório, o próprio sistema o avisaria através de uma mensagem. Isso agora é possível com Windows 10. Evidentemente que você terá que criar a tarefa em segundo plano talvez utilizando Threads ou algum outro recurso, portanto aqui mostraremos apenas como criar as notificações no Windows.
Nós já vimos algo parecido quando estudamos notificações no iOS e Android nessa publicação. Utilizamos para esse tutorial, o componente NotificationCenter da paleta System. Para Windows 10 usaremos exatamente o mesmo componente. Vejamos:
Crie uma nova aplicação utilizando o menu File > New > VCL Forms Application – Delphi. Salve o projeto onde desejar e insira nele um primeiro TButton. Insira também um componente TNotificationCenter como mencionado anteriomente. Clique duas vezes no Button1 para que possamos codificar seu eveno OnClick conforme o código da Listagem 1.
var MyNotification: TNotification; begin MyNotification := NotificationCenter1.CreateNotification; try MyNotification.Name := 'Windows10Notification'; MyNotification.Title := 'Windows 10 Notification #1'; MyNotification.AlertBody := 'RAD Studio 10 Seattle'; NotificationCenter1.PresentNotification(MyNotification); finally MyNotification.Free; end;
Listagem 1. Código do Button1
Perceba que a codificação é bastante simples. Em primeiro lugar nós declaramos uma variável do tipo TNotification chamada MyNotification. A seguir nós instanciamos essa variável utilizando o método construtor CreateNotification do objeto TNotification. A partir desse momento podemos configurar o Nome (Name), Título (Title) e Corpo da Notificação (AlertBody) que será enviada ao sistema operacional. Por fim basta que chamemos o método PresentNotification passando como parâmetro nossa variável para que a notificação seja enviada imediatamente ao Windows 10. Experimente rodar a aplicação agora e clicar no botão. Um balão próximo ao relógio do Windows será mostrado. Clicando no botão de mensagens do Windows, podemos ver nossa notificação “printada” na tela de notificações.
Notificações agendadas
Assim como vimos na publicação sobre notificações no iOS e Android, no Windows também temos a possibilidade de agerdarmos uma notificação para o futuro. Nesse caso podemos utilizar a propriedade FireDate do Notification para indicar quando nossa notificação será disparada e então usando método ScheduleNotification do objeto, agendamos a mensgem. Insira um novo botão na tela e codifique seu evento OnClick como na Listagem 2.
procedure TNotificationsForm.Button2Click(Sender: TObject); var MyNotification: TNotification; begin MyNotification := NotificationCenter1.CreateNotification; try MyNotification.Name := 'Windows10Notification'; MyNotification.Title := 'Windows 10 Notification #1'; MyNotification.AlertBody := 'RAD Studio 10 Seattle'; MyNotification.FireDate := Now + EncodeTime(0, 0, 10, 0); NotificationCenter1.ScheduleNotification(MyNotification); finally MyNotification.Free; end; end;
Listagem 2. Notificação Agendada
Nossa propriedade FireDate foi configurada para disparar a notificação em 10 segundos. Teste a aplicação e aguarde 10 segundos após clicar no segundo botão.
Interceptando e Respondendo ao clique do usuário
Como parte complementar desse tutorial, veremos que é possível saber quando o usuário clicou na notificação, assim podemos agir disparando uma nova ação, como por exemplo: abrindo uma janela em nosso software, um relatório ou qualquer outra ação.
Insira um componente Memo na tela e dê o nome a ele de mmLog. Ele receberá o nome da notificação que foi clicada pelo usuário. O componente NotificationCenter possui um único evento que pode ser codificado: ReceiveLocalNotification. Basta clicar duas vezes no componente ou no evento para que o Delphi nos redirecione para o editor de códigos. Codifique apenas com a linha abaixo:
mmLog.Lines.Add('Notificação recebida: ' + ANotification.Name);
Estamos apenas “imprimindo” no componente Memo o nome da notificação (ANotification.Name) a qual o usuário clicou em cima, ou seja, podemos responder ao usuário com qualquer ação.
Cancelando uma ou mais notificações
Já que é possível agendar uma notificação, também é possível cancelar uma ou mais já enviadas ao sistema operacional. Vamos lá. Insira dois novos botões em tela. No primeiro deles apenas digite o código abaixo:
NotificationCenter1.CancelNotification('Windows10Notification');
E no segundo, a linha a seguir.
NotificationCenter1.CancelAll;
Perceba como é simples. No primeiro botão estamos chamando o método CancelNotification passando para ele o nome (Name) da notificação que desejamos cancelar. O segundo botão é ainda mais simples, bastando chamar o método CancelAll para cancelar todas. Simples não?
Conclusão
As facilidades do Delphi 10 Seattle não param por ai, por isso veremos novos tutoriais como este mostrando mais e mais recursos na nova versão do Delphi.
#GoToDelphi