Colorindo Linhas do DbGrid
Alguem saberia me dizer se existe alguma forma de colorir uma linha do dbgrid, sendo estas escolhidas pelo usuário ao teclar enter na mesma.
Salupe
Curtidas 0
Respostas
Rômulo Barros
30/07/2004
Veja o título: http://delphiforum.icft.com.br/forum/viewtopic.php?t=49344
GOSTEI 0
Klausperes
30/07/2004
Olá Amigo, Tente esse exemplo e vai adicionando no Form os componentes necessários...
• Selecione o DBGrid que terá a sua aparência personalizana e no Object Inspector, na página Events, selecione OnDrawColumnCell e efetuando um duplo-click e algo semelhante ao código abaixo aparecerá.
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
end;
• Insira, entre os comandos Begin..End, o código de personalização. Veja exemplo:
if cbPintaColuna.Checked then
begin
// Determina se a coluna é par, se sim altera a cor
if (DataCol mod 2) = 0 then
DBGrid1.Canvas.Brush.Color := clRed;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawDataCell(Rect, Column.Field, State);
end;
Neste exemplo, se o checkBox cbPintaColuna estiver marcado as colunas pares serão pintadas de vermelho.
• Selecione o DBGrid que terá a sua aparência personalizana e no Object Inspector, na página Events, selecione OnDrawDataCell e efetuando um duplo-click e algo semelhante ao código abaixo aparecerá.
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect:
TRect; Field: TField; State: TGridDrawState);
begin
end;
• Insira, entre os comandos Begin..End, o código de personalização. Veja exemplo:
var nRow: integer;
begin
if cbPintarLinha.Checked then
begin
// Através de um pequeno cálculo matemático, determinamos
// a linha que esta sendo pintada.
// Para TStringGrids, esta rotina poder ser trocada
// pelo método MouseToCell
nRow := Rect.Top div (Rect.Bottom - Rect.Top);
// Determina se a linha é par, se sim altera a cor
if (nRow mod 2) = 0 then
DBGrid1.Canvas.Brush.Color := clAqua;
DBGrid1.Canvas.FillRect(Rect);
end;
if cbForaUS.Checked then
begin
// Verifica se o Field é ´Country´
if Field.FieldName = ´Country´ then
// Verifica se é US, se sim mantém cor atual senão destaca,
// cuidado com valores NULL
if Field.Value <> ´US´ then
DBGrid1.Canvas.Brush.Color := clGreen;
end;
if cbPesquisar.Checked then
begin
// Verifica se o Field é ´State´
if Field.FieldName = ´State´ then
// Verifica se possue o texto informado,
// asString ´mata´o NULL
if pos(edAlvo.Text, Field.asString) <> 0 then
DBGrid1.Canvas.Brush.Color := clYellow;
end;
DBGrid1.DefaultDrawDataCell(Rect, Field, State);
end;
Neste exemplo, se o checkBox cbPintarLinha estiver marcado as linhas pares serão pintadas de azul-piscina. Se o checkBox cbForaUS, estiver marcado, todas as células da coluna ´Country´, que não for igual a ´US´, ficará em destaque na cor verde e se checkBox cbPesquisar, estiver marcado, todas as células da coluna ´State´, que contiver o que foi digitado em edAlvo.Text, será mostrado em amarelo.
Note que em certas ocasiões, o método DefaultDrawDataCell é chamado. A finalidade desta chamada, é que o DBGrid finalize o desenho da célula. Omita esta linha e veja o que acontece.
Agora que você aprendeu o básico, coloque a sua ´cara´ dentro do Delphi.
• Selecione o DBGrid que terá a sua aparência personalizana e no Object Inspector, na página Events, selecione OnDrawColumnCell e efetuando um duplo-click e algo semelhante ao código abaixo aparecerá.
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
end;
• Insira, entre os comandos Begin..End, o código de personalização. Veja exemplo:
if cbPintaColuna.Checked then
begin
// Determina se a coluna é par, se sim altera a cor
if (DataCol mod 2) = 0 then
DBGrid1.Canvas.Brush.Color := clRed;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawDataCell(Rect, Column.Field, State);
end;
Neste exemplo, se o checkBox cbPintaColuna estiver marcado as colunas pares serão pintadas de vermelho.
• Selecione o DBGrid que terá a sua aparência personalizana e no Object Inspector, na página Events, selecione OnDrawDataCell e efetuando um duplo-click e algo semelhante ao código abaixo aparecerá.
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect:
TRect; Field: TField; State: TGridDrawState);
begin
end;
• Insira, entre os comandos Begin..End, o código de personalização. Veja exemplo:
var nRow: integer;
begin
if cbPintarLinha.Checked then
begin
// Através de um pequeno cálculo matemático, determinamos
// a linha que esta sendo pintada.
// Para TStringGrids, esta rotina poder ser trocada
// pelo método MouseToCell
nRow := Rect.Top div (Rect.Bottom - Rect.Top);
// Determina se a linha é par, se sim altera a cor
if (nRow mod 2) = 0 then
DBGrid1.Canvas.Brush.Color := clAqua;
DBGrid1.Canvas.FillRect(Rect);
end;
if cbForaUS.Checked then
begin
// Verifica se o Field é ´Country´
if Field.FieldName = ´Country´ then
// Verifica se é US, se sim mantém cor atual senão destaca,
// cuidado com valores NULL
if Field.Value <> ´US´ then
DBGrid1.Canvas.Brush.Color := clGreen;
end;
if cbPesquisar.Checked then
begin
// Verifica se o Field é ´State´
if Field.FieldName = ´State´ then
// Verifica se possue o texto informado,
// asString ´mata´o NULL
if pos(edAlvo.Text, Field.asString) <> 0 then
DBGrid1.Canvas.Brush.Color := clYellow;
end;
DBGrid1.DefaultDrawDataCell(Rect, Field, State);
end;
Neste exemplo, se o checkBox cbPintarLinha estiver marcado as linhas pares serão pintadas de azul-piscina. Se o checkBox cbForaUS, estiver marcado, todas as células da coluna ´Country´, que não for igual a ´US´, ficará em destaque na cor verde e se checkBox cbPesquisar, estiver marcado, todas as células da coluna ´State´, que contiver o que foi digitado em edAlvo.Text, será mostrado em amarelo.
Note que em certas ocasiões, o método DefaultDrawDataCell é chamado. A finalidade desta chamada, é que o DBGrid finalize o desenho da célula. Omita esta linha e veja o que acontece.
Agora que você aprendeu o básico, coloque a sua ´cara´ dentro do Delphi.
GOSTEI 0