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

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

DBGridEh теряет расцветку [D7, WinXP]


kyn66 ©   (2009-08-28 13:26:00) 

Уважаемые мастера, помогите разобраться. Для расцветки своего грида использую следующий код:


Const
 BackColors : array[Boolean] of TColor = (clWhite, clBtnFace);

...

procedure TMainFrm.DBGridEh1DrawColumnCell(Sender: TObject;
 const Rect: TRect; DataCol: Integer; Column: TColumnEh;
 State: TGridDrawState);
begin
 With TDBGridEh(Sender) do
  begin
    if (Rect.Top = CellRect(Col, Row).Top) then
     begin
       Canvas.Brush.Color := clMoneyGreen;
       Canvas.Font.Color := clBlack;
       Canvas.Font.Style := [fsBold];
       DefaultDrawColumnCell(Rect,DataCol,Column,State);
     end;
  end;
end;

...

procedure TMainFrm.DBGridEh1GetCellParams(Sender: TObject;
 Column: TColumnEh; AFont: TFont; var Background: TColor;
 State: TGridDrawState);
begin
 Background := BackColors[(Sender as TDBGridEh).DataSource.DataSet.RecNo mod 2 <> 0];
end;


Когда грид прокручивается в вертикальной плоскости, то все нормально. http://yurec66.narod.ru/Vopros/vop1.jpg. Стоит только щелкнуть по скролу вправо, чтобы увидеть спрятанные за правым краем поля, то цветность грида нарушается. http://yurec66.narod.ru/Vopros/vop2.jpg. Вернувшись обратно влево, все снова восстанавливается http://yurec66.narod.ru/Vopros/vop1.jpg. Чтобы это значило? Возможно не совсем верно выбрано событие обработки грида?


kyn66   (2009-08-28 15:24:00) [1]


> Откуда вот так сразу вся строка? Всего лишь одна ячейка.


Нет, вся строка, так как у грида выставлены свойства dgRowSelect


Медвежонок Пятачок   (2009-08-28 14:57:00) [2]

А строка как была gdSelected так ею и осталась.

Откуда вот так сразу вся строка? Всего лишь одна ячейка.


kyn66   (2009-08-28 14:56:00) [3]


> А зачем это, и тем более замешанное на рекно?Полосатость
> ехгрид и сам умеет поддерживать без пользовательского кода


Это осталось еще от применения к обычным гридам. Можно и не использовать, а воспользоваться Sequenced


kyn66   (2009-08-28 14:48:00) [4]


> Разница есть. видно, что разрисовка пропадает только у ячеек
> в состоянии gdSelected


Точнее сказать у "активного окна" А строка как была gdSelected так ею и осталась. Здесь что-то другое Почему-же при сдвиге влево все возвращается обратно к нормальному виду?. Раньше, как вариант, я полностью раскрытый на всю ширину грид помещал на ScrollBox и был задействован именно его скрол. Тогда се было нормально.


KilkennyCat   (2009-08-28 14:12:00) [5]


> СОздал еще 4  строки - разницы нет. При сдвиге вправо -
> разрисовка пропадает.

Разница есть. видно, что разрисовка пропадает только у ячеек в состоянии gdSelected


Медвежонок Пятачок   (2009-08-28 14:10:00) [6]

Background := BackColors[(Sender as TDBGridEh).DataSource.DataSet.RecNo mod 2 <> 0];

А зачем это, и тем более замешанное на рекно?
Полосатость ехгрид и сам умеет поддерживать без пользовательского кода


KilkennyCat   (2009-08-28 14:10:00) [7]


> TGridDrawState

http://www.delphimaster.ru/articles/stringgrid/index.html
[2] считать неверным

> if (Rect.Top = CellRect(Col, Row).Top) then

заменить на нормальное, учитывая выше свойство и ссылку


kyn66   (2009-08-28 13:55:00) [8]

Да http://yurec66.narod.ru/Vopros/vop3.jpg
http://yurec66.narod.ru/Vopros/vop4.jpg


KilkennyCat   (2009-08-28 13:49:00) [9]

и все становятся синими?


kyn66   (2009-08-28 13:48:00) [10]


> создайте более одной строки, чтобы видеть разницу.


А что это даст. ? СОздал еще 4  строки - разницы нет. При сдвиге вправо - разрисовка пропадает.


KilkennyCat   (2009-08-28 13:40:00) [11]

добавлю, что Ваш код не предусматривает раскрашивание строки в состоянии selected


KilkennyCat   (2009-08-28 13:38:00) [12]

событие верно.
происходит выделение строки.
создайте более одной строки, чтобы видеть разницу.
привет Эхлибу.


Наверх

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