Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Цветные строки в DBGrid.


Kolan ©   (2007-08-01 15:55:00) 

Мне нужно раскрасить нечет. строки. Трудность в том как кзнать что тек строка нечётная…

1. По RecNo?
— Попадаются так, что подряд идут две нечётных строки :(

2. Думал что победил проблему так:
var
 Coords: TGridCoord;
begin
 if Sender is TDBGridEh then
   with Sender as TDBGridEh do
   begin
     Coords := MouseCoord(Rect.Left, Rect.Top);
     
     if gdSelected in State then
       Canvas.Brush.Color := clHighlight
     else
     begin
       if Odd(Coords.Y) then
       begin
         Canvas.Brush.Color := $00EEEEEE;
       end
       else
         Canvas.Brush.Color := clWindow;
     end;
     DefaultDrawColumnCell(Rect, DataCol, Column, State);
   end;
end;


Однако в этом случае Coords.Y = 1 будет не у первой из всех отображенных, а у верхней видимой.
То есть если строк 100.А окно маленькое и чел видит 2-20, то верхняя строка, на самом деле вторая по счёту, будет первой и ессно все испортится :(

Как его раскарасить правильно ?


Плохиш   (2007-08-01 17:13:00) [1]


>     if Odd(TFakeGrid(Sender).DataLink.ActiveRecord) then

Для первой видимой строки ActiveRecord всегда равен нулю, поэтому при скроллинге перемещается только содержимое строк, но не закраска.


Kolan   (2007-08-01 16:45:00) [2]

Блин, наврал. Просто там код не полный был, а я подумал, что это все что надо.
Так:
procedure TMainForm.StationaryDBGridEhDrawColumnCell(Sender: TObject;
 const Rect: TRect; DataCol: Integer; Column: TColumnEh;
 State: TGridDrawState);
begin
 if Sender is TDBGridEh then
 begin
    if Odd(TFakeGrid(Sender).DataLink.ActiveRecord) then
       (Sender as TDBGridEh).Canvas.Brush.Color := $00EEEEEE
    else
      TDBGrid(Sender).Canvas.Brush.Color := clWindow;
    (Sender as TDBGridEh).DefaultDrawColumnCell(Rect, DataCol, Column,
      State);
 end;
end;


Вроде нормально :)


Kolan   (2007-08-01 16:40:00) [3]

Поспешил :(
  if TFakeGrid(Sender).DataLink.ActiveRecord and 1 0 then
    TDBGrid(Sender).Canvas.Brush.Color:=$00EEEEEE;

Неработает. ActiveRecord — странные значения принимает…


Kolan   (2007-08-01 16:31:00) [4]

> статью «полосатый грид» на delphikingdom.ru читал?

Млин че я не догался сам. Читал ведь про ActiveRecord.
Благодарю :)


clickmaker   (2007-08-01 16:00:00) [5]

статью "полосатый грид" на delphikingdom.ru читал?


Наверх

Титульная страница Поиск, карта сайта Написать письмо