5 de novembro de 2009

Customizando a aparência de um Grid em Delphi - parte 1

As tabelas - ou grids - são um recurso bastante usado em aplicações Delphi, principalmente aquelas que implementam acesso a informações em bancos de dados e que, portanto, fazem uso dos grids para tabular registros do banco de dados. O funcionamento padrão dos Grids em Delphi dão conta de exibir corretamente as informações associadas a eles, sem precisar de muito configuração. No geral, basta alimentar as células internas (no TStringGrid) ou ajustar as fontes de dados e queries (no TDBGrid) para ter um Grid funcional, exibindo seu conteúdo em linhas e colunas e permitindo navegação.

Há situações, no entanto, que o funcionamento básico não é o bastante. Um dos módulos disponíveis no ERP da ABC71, por exemplo, é um MRP II que faz uso intensivo de grids para exibir informações relacionadas ao Planejamento de Produção. Nestes grids é necessário dar destaque a células cujo conteúdo exija uma atenção diferenciada - falta de saldo de um produto, por exemplo. Uma outra situação, esta mais convencional, seria mostrar créditos em azul e débitos em vermelho num grid com dados do Balanço.

Há um evento nos grids com o nome de OnDrawCell (ou OnDrawDataCell, no DBGrid) e que foi projetado justamente para permitir a customização da aparência desses grids.

Antes de seguir falando sobre o evento em si, é necessário introduzir um conceito indispensável para podermos codificar a nova aparência. Em Delphi e C++ Builder, todos os componentes visuais (aqueles que aparecem na tela quando o programa é executado) são construídos em cima de uma tela de pintura chamada Canvas. Um Canvas é uma matriz de pontos - os pixels - que cobre toda a altura e largura reservada para o componente. Cada ponto tem sua própria cor, de modo que podemos dar ao componente a aparência que quisermos apenas preenchendo os pontos de acordo com o desejado.

No Delphi e no C++ Builder, os Canvas são instâncias da classe TCanvas, que na verdade encapsulam chamadas a uma biblioteca da API do Windows denominada GDI+. O GDI+ é a responsável pelos gráficos do Windows, incluindo o desenho de textos, linhas e imagens além de transmitir corretamente esses gráficos para a mídia a que se destinam (a tela do computador ou o papel numa impressora, por exemplo).

O TCanvas disponibiliza funções para desenho de linhas e polígonos, preenchimento de áreas com cores e padrões, desenho de textos e renderização de imagens já prontas. As principais propriedades do TCanvas e a utilidade de cada uma é descrita na lista abaixo:
Brush: O Pincel é usado para configurar cores e padrões de preenchimento de áreas. Os padrões permitidos incluem alguns valores predefinidos e a possibilidade de espeficar um Bitmap como modelo. Funções do TCanvas que desenham a cor de fundo (como o Rectangle, que é um retângulo preenchido) também usam as propriedades definidas no Brush para fazerem o preenchimento.
Pen: A Caneta define como será feito o desenho de linhas, incluindo a cor dos pontos que a comporão, a largura da linha e um padrão de desenho (linha cheia, pontos, traços, etc.). As funções que desenham polígonos também usam a configuração do Pen para traçar as linhas que limitam o polígono (como no caso do Rectangle)
Font: A Fonte permite estabelecer as características dos textos que serão desenhados, incluindo a família da fonte (Arial, Courier, etc.), o tamanho e cor das letras, se terá alguma decoração extra (negrito, itálico, etc.). Usada pelas funções relativas ao desenho de textos como TextOut.
CopyMode: Essa propriedade é usada quando se faz cópia de partes (ou o todo) de um Canvas para outro. Ela afeta o modo como essa cópia é feita, determinando o tipo de combinação entre os pontos existentes em cada Canvas. Isto é, se as cores dos pontos no Canvas de origem apenas substituirão aqueles existentes no destino ou se será aplicado algum operador lógico ou uma outra regra de combinação. Como resultado, pode-se conseguir uma série de efeitos.
Pixels: Cada um dos pontos que compõem a tela de pintura pode ser acessado individualmente através dessa propriedade. Ela é um array bidimensional (largura e altura da área de pintura) que permite mudar a cor mantida em cada ponto. Usar a propriedade Pixels é útil quando se quer traçar os pontos determinados por uma função matemática - algo como y = f(x).

Consulte a documentação do TCanvas para maiores detalhes sobre essas propriedades e as funções existentes.

No próximo post, volto com o exemplo dos Grids customizados para mostrar na prática o uso do Canvas.

Mais Informações
Documentação do GDI+

Nenhum comentário :

Postar um comentário

OBS: Os comentários enviados a este Blog são submetidos a moderação. Por isso, eles serão publicados somente após aprovação.

Observação: somente um membro deste blog pode postar um comentário.