GARANTIR DESCONTO

Fórum Colorir linha selecionada na DBGrid #357569

24/04/2008

0

Olá pessoal!

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

Webjoel

Responder

Post mais votado

16/11/2015

Muito Obrigado Pessoal, Estava precisando. estou desenvolvendo em delphi xe8 e windos 10. Quando a Aplicação era executada no Windows 7 não mostrava a seleção, apenas duas linhas bem apagadas. Pois estava usando o gdSelected = true.

Agora com esse Código ficou 100%

Daniel Qualhato

Daniel Qualhato
Responder

Gostei + 1

Mais Posts

24/04/2008

Webjoel

Olá Pessoal!

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;



Responder

Gostei + 0

29/04/2008

Webjoel

Olá pessoal!

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.


Responder

Gostei + 0

29/04/2008

Marco Salles

bem . ja conhecia o codigo , mas so não entendo o pq de usar dois If
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;



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar