![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]событие верно.
происходит выделение строки.
создайте более одной строки, чтобы видеть разницу.
привет Эхлибу.