Um dos componentes mais complexos e ao mesmo tempo mais “extraordinários” da DevExpress é, sem dúvidas, o cxScheduler que nos permite montar toda uma estrutura de agenda com um único controle.
Explicar detalhadamente todas as propriedades, eventos e métodos do cxScheduler levaria algum tempo e um único artigo não seria bastante para isso. Então, o objetivo deste artigo é apresentar, de forma rápida, as principais funcionalidades deste componente através de exemplos práticos de uso.
Para iniciar, crie uma nova aplicação de formulário no Delphi (File > New > VCL Forms Application) e no form principal adicione um componente cxScheduler, como mostra a Figura 1.
Figura 1: cxScheduler básico na tela
A respeito da imagem acima vale fazer algumas observações:
- No lado esquerdo tem-se uma marcação vertical referente ao horário. A marcação é feita a cada 30 min, aos quais corresponde uma linha no centro (região amarela). Não significa que os eventos da agenda só podem ser definidos em horários múltiplos de trinta minutos, essa é apenas uma marcação visual para facilitar a identificação.
- Ainda na marcação dos horários, há uma linha horizontal (de cor laranja, na figura) que indica o horário atual. Mesmo em tempo de design esta linha se mantém em uma posição fiel. Assim, no momento da captura da Figura 1, o relógio marcava aproximadamente 11h20.
- Nas laterais da região amarela existem dois botões: “Previous appointment” e “Next apointment” que, quando houver eventos agendados antes ou depois do dia e horário que se está visualizando, levarão o usuário até eles.
- Na parte superior direita, há um calendário que pode ser usado, inclusive em tempo de design, para navegar entre as datas.
- Clicando com a direita sobre o controle, em tempo de design a primeira opção do menu de contexto é “Active view”, que permite escolher a forma como a agenda é exibida (diária, semanal, mensal, etc).
Executando o projeto, vemos que não é possível adicionar nenhum evento, dando dois cliques ou clicando com a direita sobre o horário. Como vemos na Figura 2, as opções do menu de contexto principal estão desabilitadas, sendo permitido utilizar apenas duas opções de navegação.
Figura 2: Menu de contexto do cxScheduler com opções desabilitadas
A opção “Today” faz com que a agenda exiba a data atual, enquanto a opção “Go to Date...” permite ir para uma data específica, conforme a Figura 3.
Figura 3: Opção Go to Date
O campo “Show In” define o tipo de calendário que será exibido após a busca. As opções são: diário, semanal, mensal e semanal com apenas os dias úteis.
A inserção de eventos está desabilitada porque nenhuma forma de armazenamento foi definida ainda. É necessário escolher um arquivo ou um uma conexão com ou banco de dados no qual as informações serão gravadas, como veremos a seguir.
Salvando a agenda em arquivo local
Uma das formas de se armazenar os dados da agenda é utilizando o componente auxiliar cxSchedulerStorage para salvar os agendamentos em um arquivo local. Então, para prosseguir adicione um componente desse ao form e o ligue ao cxScheduler através da propriedade Storage desse segundo.
Para testes, os dados serão salvos quando o formulário for fechado, pois nesse ponto o usuário já deve ter feito todas as inserções, alterações e exclusões necessárias. No evento onClose do formulário principal, adicione o código para gravar os dados conforme mostra a Listagem 1.
Listagem 1: Gravando os dados da agenda em arquivo
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction)
begin</p>
cxSchedulerStorage1.SaveToFile('D:\Agenda.txt');
end;
Em seguida, acesse o evento OnShow do formulário e insira o código para carregar os dados da agenda a partir do arquivo previamente gravado. Caso o arquivo não exista, será gerado um erro, então crie um arquivo de texto com nome e caminho que informou no método SaveToFile.
Listagem 2: Carregando os dados do arquivo
procedure TForm1.FormShow(Sender: TObject);
begin
cxSchedulerStorage1.LoadFromFile('D:\Agenda.txt');
end;
Nos exemplos foi utilizado o path ‘D:\Arquivo.txt’, mas outros formatos também podem ser utilizados. Porém, o formato escolhido não reflete diretamente na forma como os dados são dispostos no arquivo.
Os métodos para salvar e carregar os dados já foram definidos, pode-se então testar o funcionamento do projeto. Para isso, execute-o, escolha um horário e dê dois cliques sobre a linha correspondente na região amarela. Uma janela como a da Figura 4 será mostrada.
Figura 4: Adição de evento
Os campos encontrados nessa tela são os seguintes:
- Subject: assunto ou título do evento que será listado na agenda.
- Location: local onde ocorrerá o evento, utilizado para reuniões, festas, etc.
- Label: categoria do evento, existem alguns valores predefinidos como “Importante”, “Negócios” e “Pessoal”.
- Start time: data e horário de início do evento.
- End time: data e horário de término do evento.
- All day event: essa opção faz com que o evento seja marcado como “diário”, ou seja, agendado para todos os dias no mesmo horário.
- Reminder: quando ativa, essa opção faz com que o usuário seja relembrado (alarme) sobre o evento a cada intervalo de tempo predefinido. Um exemplo de alarme é mostrado na Figura 5.
- Show time as: como o evento será mostrado na agenda (“Ocupado”, “Externo”, etc).
Figura 5: Alarme de evento
Quando o alarme é exibido, pode-se utilizar a opção “soneca” (snooze) para adiá-lo por alguns minutos, ou finalizar a tarefa usando os botões “Dismiss” ou “Dismiss All” (para finalizar todas).
Ainda na tela de cadastro de evento, clicando no botão “Recurrence” é possível definir configurações de repetição do evento, como mostra a Figura 6.
Figura 6: Definindo a repetição do evento
Nessa tela pode-se definir que o evento repete-se diariamente, semanalmente, mensalmente ou anualmente, utilizando uma das várias opções disponíveis.
Na parte inferior pode ser escolhida uma data de encerramento do evento ou uma quantidade de vezes que o evento vai se repetir até ser encerrado.
Registre um evento e feche a aplicação. Em seguida, execute novamente o projeto e veja que o agendamento foi gravado no arquivo e carregado na abertura do formulário.
Figura 7: Evento marcado na agenda
Conclusão
Como foi possível ver ao longo deste artigo, não é complicado criar um sistema de agendamento simples utilizando o cxScheduler e armazenando dados em um arquivo local. Certamente a maioria deve preferir armazenar as informações em um banco de dados, separar por usuário, etc, mas este assunto caberia a outro artigo, pois requer um maior detalhamento do componente e de algumas de suas propriedades e componentes auxiliares.
O objetivo dessa publicação foi apresentar as principais funcionalidades do componente em execução, explicando o significado de cada um dos campos apresentados para o usuário.
Espero que o conteúdo aqui apresentado possa ser útil. Agradeço a atenção do leitor e até a próxima.