DBGrid, kolory parzystych wierszy a kolor wybranego wiersza

Odpowiedz Nowy wątek
2006-11-12 19:14
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ź.

Pozostało 580 znaków

2006-11-12 21:39
fox1001
0

spróbuj www.scalabium.com
pozdr

Pozostało 580 znaków

2006-11-12 23:25
0

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

Pozostało 580 znaków

2006-11-13 11:59
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

Pozostało 580 znaków

2006-11-13 16:36
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ć :)

Pozostało 580 znaków

2006-11-14 02:04
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;

- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2007-01-05 22:06
misior
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

Pozostało 580 znaków

2010-01-19 11:52
Wojtaszek
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;

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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