Você está na página 1de 8

Utilizando o componente cxScheduler da DevExpress https://www.devmedia.com.br/view/print.php?

idcomp=25800

www.devmedia.com.br
[versão para impressão]
Link original: https://www.devmedia.com.br/utilizando-o-componente-cxscheduler-da-devexpress/25800

Utilizando o componente cxScheduler da DevExpress


Veja neste artigo uma breve apresentação do componente cxScheduler da
biblioteca DevExpress para Delphi. Serão apresentados suas principais
funcionalidades, juntamente como um exemplo onde se grava os dados
dos agendamentos em uma arquivo local.

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.

1 of 8 14/01/2019 13:30
Utilizando o componente cxScheduler da DevExpress https://www.devmedia.com.br/view/print.php?idcomp=25800

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

2 of 8 14/01/2019 13:30
Utilizando o componente cxScheduler da DevExpress https://www.devmedia.com.br/view/print.php?idcomp=25800

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

3 of 8 14/01/2019 13:30
Utilizando o componente cxScheduler da DevExpress https://www.devmedia.com.br/view/print.php?idcomp=25800

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.

4 of 8 14/01/2019 13:30
Utilizando o componente cxScheduler da DevExpress https://www.devmedia.com.br/view/print.php?idcomp=25800

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

5 of 8 14/01/2019 13:30
Utilizando o componente cxScheduler da DevExpress https://www.devmedia.com.br/view/print.php?idcomp=25800

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.

6 of 8 14/01/2019 13:30
Utilizando o componente cxScheduler da DevExpress https://www.devmedia.com.br/view/print.php?idcomp=25800

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.

7 of 8 14/01/2019 13:30
Utilizando o componente cxScheduler da DevExpress https://www.devmedia.com.br/view/print.php?idcomp=25800

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.

8 of 8 14/01/2019 13:30

Você também pode gostar