quinta-feira, 13 de novembro de 2008

Dicas de DBGrid - Final [Mostrando Imagens]

Mostrando Imagens no DBGrid

Muito útil também na analise das informações de um DBGrid, um recurso que este componente também possibilita é o uso de imagens em agregadas à colunas e valores do mesmo. Para configurar o recurso de imagens, adicione ao formulário um componente ImageList da paleta de componentes Win32 e com um duplo clique sobre o mesmo, utilize o botão “Add” para adicionar dois ícones que utilizaremos na representação de aprovado ou reprovado quanto a nota média obtida pelo aluno. Os ícones poderão normalmente ser encontrados nos diretório “C:\Arquivos de Programas\Arquivos Comuns\Borland Shared\Images\Buttons”.

Após adicionados os ícones, vá até o evento DrawColumnCell do gdRegistros, onde criamos a pouco as linhas de código responsáveis por zebra o DBGrid. Os códigos de adição de imagens serão conciliados aos códigos já adicionados, onde o evento deverá ter o seguinte código exibido na Listagem 3.

Listagem 3. Utilizando imagens no DBGrid

procedure TfrmPrincipal.gdRegistrosDrawColumnCell(Sender: TObject;

const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);

var

bitmap : TBitmap;

fixRect : TRect;

bmpWidth : integer;

imgIndex : integer;

begin

//Deixa o DBGrid Zebrado

if not Odd (cdsRegistros.RecNo) then

if not (gdSelected in State) then

begin

gdRegistros.Canvas.Brush.Color := clSilver;

gdRegistros.Canvas.FillRect(Rect);

gdRegistros.DefaultDrawDataCell(Rect,Column.Field,State);

end;

//Incrementa as inagens no DBGrid

fixRect := Rect;

if Column.Field = cdsRegistrosNotaMedia then

begin

//Utilizaremos uma condiçao simulando a média de aprovação 8

if cdsRegistrosNotaMedia.Value >= 8 then

imgIndex := 0

else

imgIndex := 1;

//Criar em runtime um TBitmap

bitmap := TBitmap.Create;

try

//Selecionando a imagem...

ImageList1.GetBitmap(imgIndex,bitmap);

//Fixar as dimensões do bitmap

bmpWidth := (Rect.Bottom - Rect.Top);

fixRect.Right := Rect.Left + bmpWidth;

//Desenhar o bitmap (imagem)

gdRegistros.Canvas.StretchDraw(fixRect,bitmap);

finally

//Limpa o TBitmap

bitmap.Free;

end;

//Ajustar o espaço do Retângulo para a imagem

fixRect := Rect;

fixRect.Left := fixRect.Left + bmpWidth;

end;

//Desenhar o texto no Grid

gdRegistros.DefaultDrawColumnCell(fixRect,DataCol,Column,State);

end;

Ao executar agora nossa aplicação, observe que o Grid ficou organizado de uma forma bem diferente, onde todas as médias de alunas iguais ou acima de 8 foram agregadas a uma imagem e o restante dos resultados a um outro Bitmap representando que os mesmos foram reprovados (Figura 5).

Figura 5. Aparência do DBGrid após implementação do uso de imagens

Opções do DBGrid

Ao selecionar o DBGrid observe uma propriedade chamada Options, na qual poderemos ainda fazer uma série de configurações na aparência do DBGrid. Irei apresentar algumas das opções mais utilizadas:

- dgEditing: deixe esta opção habilitada com True. É responsável por permitir a edição e cadastro de registros diretamente no Grid, recurso que no caso desta aplicação está sendo utilizado por não termos uma tela especifica para cadastros e edições.

- dbTitles: recurso onde você poderá optar entre exibir ou ocultar a linha de apresentação dos títulos do DBGrid, deixe-a como True.

- dgIndicator: permite que você escolha em exibir ou não a seta de indicação na linha do Grid que está selecionada. Altere o recurso para False.

- dgColLines: nesta opção você poderá configurar se deseja exibir ou ocultar as linhas das colunas do DBGrid. Deixe habilitada como True esta função.

- dgRowLines: altere esta opção para False e observe que as linhas entre os registros do DBGrid não estarão mais sendo exibidas.

- dgMultiSelect: propriedade que permite a configuração de permitir que o usuário selecione mais de uma linha por vez no DBGrid. Altere a opção para True.

Após estas configurações execute sua aplicação novamente e verifique uma aparência diferenciada da qual obteve na execução anterior. A aparência do Grid será semelhante a imagem ilustrada na Figura 6.

Figura 6. DBGrid modificado através da propriedade Options

Conclusão

Vimos nestes post formas praticas e interessantes de trabalhar e customizar a aparência do componente DBGrid em suas aplicações. Estas dicas aqui mostradas foram poucas comparado com o grande número de situações e customizações possíveis ao componente, fica então o desafio de você mesmo descobrir novos recursos, como por exemplo implantação de campos Lookup em um DBGrid ou ainda em tempo de execução estar adicionando outros componentes em Runtime como por exemplo um CheckBox. Grande abraço e até a próxima.

3 comentários:

Mateus André Chies disse...

Show de bola

Já esta parecendo um gridwiew

heheheh

Unknown disse...

Parabens!

Muito bom

Mário Sergio

Cláudio Américo disse...

Na indexação no seu artigo ex: cdsRegistros.IndexFieldNames := Column.FieldName; Se você clicar em um registro que esteja vazio o seu Sistema trava. Indexa apenas um campo obrigatório e desabilite o dbgrid se o mesmo não tiver nenhum registro, pois também pode gerar erro se clicar novamente em um registro em branco. Espero ter ajudado e Parabéns pelo Artigo.