Fórum Colorir linha selecionada na DBGrid #357569
24/04/2008
0
O tópico parece bobo, mas eis que já varri a internet em busca da solução e ainda naum encontrei.
Problema:
Possuo uma DBGrid onde cadastro os itens do pedido, com isso ela está com a propriedade dgRowSelected = False, e preciso que a linha que estou ediando fique destacada, mas só consigo isso com o dgRowSelected = True.
Alguém já passou por esse problema?
Estou usando o gdSelected, mas o mesmo só pinta a célula que selecionei.
Obrigado!
Webjoel
Curtir tópico
+ 0Post mais votado
16/11/2015
Agora com esse Código ficou 100%
Daniel Qualhato
Gostei + 1
Mais Posts
24/04/2008
Webjoel
Resolvi o problema, Deus Salve o Google! Basta ser insistente...hehe
Eis o código:
THackDBGrid = class(TDBGrid); //declarar essa linha no Type procedure TPedidoForm.DBGrid1CellClick(Column: TColumn); var Row, ACol: integer; begin Row := THackDBGrid(DBGrid1).Row; ACol := 1; while ACol <= Pred(THackDBGrid(DBGrid1).ColCount) do begin DBGrid1DrawColumnCell(DBGrid1, THackDBGrid(DBGrid1).CellRect(ACol, Row), (ACol - 1), DBGrid1.Columns.Items[(ACol - 1)], [gdSelected, gdFocused]); Inc(ACol); end; end; procedure TPedidoForm.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin With dbGrid1 do begin if (gdSelected in State) then begin Canvas.Font.Style := Canvas.Font.Style +[fsBold]; Canvas.Font.Color := clblue; end; DefaultDrawDataCell(Rect, Columns[DataCol].Field, State); end; end;
Gostei + 0
29/04/2008
Webjoel
Descartem meu post anterior, esse procedimento anterior resolveu para um lado e piorou para outro, quando edita um valor ele dá problemas.
Eis outra solução, essa encontrada aqui no Fórum postada pelo Jáder,
Evento DrawColumnCell da DBGrid
if DBGrid1.DataSource.DataSet.State in [dsEdit, dsInsert, dsBrowse] then begin //Cor da linha selecionada if Rect.Top = TStringGrid(DBGrid1).CellRect(DataCol,TStringGrid(DBGrid1).Row).Top then begin Canvas.FillRect(Rect); Canvas.Font.Style := Canvas.Font.Style + [fsBold]; Canvas.Font.Color := clblue; DefaultDrawDataCell(Rect,Column.Field,State) end; if gdSelected in State then begin //Cor da célula selecionada Canvas.Font.Style := Canvas.Font.Style + [fsBold]; Canvas.Font.Color := clblue; Canvas.FillRect(Rect); DefaultDrawDataCell(Rect,Column.Field,State) end; end;
Tem muita gente ai com o mesmo problema! Tá resolvido, foi o que trouxe o resultado perfeito! Valeu.
Gostei + 0
29/04/2008
Marco Salles
com as mesmas instruções
with DbGrid1 do begin if DataSource.DataSet.State in [dsEdit, dsInsert, dsBrowse] then //Cor da linha selecionada if (Rect.Top = TStringGrid(DBGrid1).CellRect( DataCol ,TStringGrid(DbGrid1).Row).Top) or( gdSelected in State) then begin Canvas.FillRect(Rect); Canvas.Brush.Color := clblue; DefaultDrawDataCell(Rect,Column.Field,State) end; end;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)