DBGrid, kolory parzystych wierszy a kolor wybranego wiersza

0

Witam,

Chciałbym, aby w DBGridzie wiersze miały otrzymywały kolory naprzemian szary i biały.
Udało mi się to zrobić tak:

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  DBGrid1.Canvas.Font.Color:=clblack;
  if DataSource1.DataSet.RecNo mod 2 =0 then
    DBGrid1.Canvas.Brush.Color:=cl3Dlight
  else
    DBGrid1.Canvas.Brush.Color:=clwhite;
  DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

user image

I wszystko byłoby ok, gdyby nie to, ze po zastosowaniu takiego rozwiązania, nie podswietlają się kolejne rekordy kiedy klikne na nie myszką.
Wcześniej, ustawiłem parametr dbAlwaysShowSelection na True i po wyborze komorki, cały wiersz ładnie się podświetlał.

Czy jest jakiś sposób aby przy takim kolorowaniu jakie zastosowałem była mozliwość podswietlenia aktywnej komorki? Dzięki temu DBGrid byłby czytelniejszy.

Dziękuję za odpowiedź.

0

spróbuj www.scalabium.com
pozdr

0

Dziękuję, a znasz może jakieś darmowe odpowiedniki?

0

A może zrobisz jakoś w OnClick Dbgrida własne kolorowanie zaznaczonej komórki?

W twoim kodzie w połowie można rozwiązać twój problem kolorując parzyste tylko wiersze, bez tego else white bo white masz domyslnie ustawiony dbgrid na biały. Popierdzieliłem trochę ale chyba mnie zrozumiesz. :P

0

Proponuję przyjrzeć się dokładnie parametrowi zdarzenia: State: TGridDrawState.

Na tej podstawie można się zorientować czy dany rekord jest zaznaczony i odpowiednio go pokolorować :)

0
fox1001 napisał(a)

spróbuj www.scalabium.com
pozdr

odpowiedz na miarę ...

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  with DBGrid1.Canvas, DataSource1.DataSet. do
  begin
    if not((gdFocused in State) or (gdSelected in State)) then
    begin
      Font.Color:=clblack;
      if RecNo mod 2 =0 then
        Brush.Color:=cl3Dlight
      else
        Brush.Color:=clwhite;
    end;
  DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
0

SMDBGrid z http://www.scalabium.com jest darmowy (FreewareSMComponents) i rozwiazuje sporo problemów standardowego DBGrida. Kolorowanie rekordów jest bajecznie proste a dodatkowe właściwości i eventy naprawde ułatwiają robote (np. dobrze działający MouseWheel).

pozdrawiam

0

procedure TForm.GridDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Table.RecNo mod 2 = 0 then begin
Grid.Canvas.Brush.Color:=clBtnFace;
Grid.DefaultDrawDataCell(Rect,Column.Field,State);
end;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0