![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Неправильно-полосатый Grid [D7, ADS]
kyn66 © (2008-12-19 15:25:00)Уважаемые мастера, представляя информацию из таблицы в TGrid-е , я всегда делаю его полосатым. Однако недавно сталкнулся с тем, что полоски формируются неправильно, если таблица индексирована по некоторому полю. http://yurec66.narod.ru/Hlam/vop1.jpg. В данном случае обрабатываю так:
...
Const
BackColors : array[Boolean] of TColor = (clWhite, clBtnFace);
....
procedure TTiragVLFrm.DBGridEh1GetCellParams(Sender: TObject;
Column: TColumnEh; AFont: TFont; var Background: TColor;
State: TGridDrawState);
begin
Background := BackColors[DM1.SvodTVLTbl.RecNo mod 2 <> 0];
end;
Т.е. в данном случае RecNo не совпадает с номером по ключу. Можно-ли это как побороть, чтобы полоски следовали в четкой последовательности?
kyn66 (2008-12-20 13:22:00) [21]
> Пользуй OnDrawColumnCell.
И что в нем писать для полосатости грида? У меня на этом событии идет отрисовка курсора в таблице.
procedure TTiragVLFrm.DBGridEh1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumnEh;
State: TGridDrawState);
begin
With TDBGridEh(Sender) do
begin
DefaultDrawColumnCell(Rect,DataCol,Column,State);
if (Rect.Top = CellRect(Col, Row).Top) then
begin
Columns[1].Alignment := taRightJustify;
Columns[2].Alignment := taRightJustify;
Canvas.Brush.Color := clMoneyGreen;
Canvas.Font.Color := clBlack;
Canvas.Font.Style := [fsBold];
// DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
end;
end;
Leonid Troyanovsky (2008-12-20 12:09:00) [22]
> kyn66 © (20.12.08 10:26) [15]
> Что дает внедрение TDLDBGrid ?
Доступ к DataLink.
> А у него есть свое событие DrawDataCell
Пользуй OnDrawColumnCell.
--
Regards, LVT.
kyn66 (2008-12-20 10:26:00) [23]>>sniknik
А в чем преимущества предложенного метода [13] ? Я использую DBGridEh1. А у него есть свое событие DrawDataCell. Что дает внедрение TDLDBGrid?
Германн (2008-12-20 01:14:00) [24]
> sniknik © (19.12.08 21:24) [13]
Ааа. Так вот что имелось в виду в том вопросе о номере строки в DBGrid http://www.delphimaster.ru/cgi-bin/forum.pl?id=1228492011&n=18
sniknik (2008-12-19 21:24:00) [25]
Const
BackColors : array[Boolean] of TColor = (clWhite, clBtnFace);
type
TDLDBGrid = class(TDBGrid);
....
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
begin
with TDLDBGrid(Sender) do begin
Canvas.Brush.Color:= BackColors[Odd(DataLink.ActiveRecord)];
DefaultDrawDataCell(Rect, Field, State);
end;
end;
Правильный$Вася (2008-12-19 16:20:00) [26]
> kyn66 © (19.12.08 15:37) [5]
я говорил о СПЕЦИАЛЬНОМ поле, а не о ключе
и не о таблице, а о ВЫБОРКЕ
kyn66 (2008-12-19 16:04:00) [27]
> *.DrawCell(ACol, ARow: Longint;...)
не нахожу такого события
Jeer (2008-12-19 15:51:00) [28]*.DrawCell(ACol, ARow: Longint;...)
kyn66 (2008-12-19 15:44:00) [29]
> Еще раз внимательно посмотри на [3]
На какое событие подвешено?
Виталий Панасенко (2008-12-19 15:41:00) [30]в курсе.. это пример, для наглядности, что где...
Jeer (2008-12-19 15:40:00) [31]
> А если не цифровое? А если цифры не по порядку идут? Еще
> варианты есть? За первый спасибо.
Еще раз внимательно посмотри на [3]
Привязываемся к гриду, а не к датасету.
Jeer (2008-12-19 15:39:00) [32]
> Виталий Панасенко (19.12.08 15:34) [4]
>
> Color - глобальная переменная(или поле), инициализируемая
> при создании формы любым из цветов: colorValue1/2
Не в курсе, что не стоит использовать имена переменных, совпадающих с именами стандартных свойств ?
kyn66 (2008-12-19 15:37:00) [33]
> не использовать RecNo, использовать специальное поле в выборке,
> нумерующее отсортированную выборку
Да действительно, сработало. Но в данном случае так попало, что у меня в ключе цифровое поле.
Background := BackColors[DM1.SvodTVLTblTir.Value mod 2 <> 0];
А если не цифровое? А если цифры не по порядку идут? Еще варианты есть? За первый спасибо.
Виталий Панасенко (2008-12-19 15:34:00) [34]Color - глобальная переменная(или поле), инициализируемая при создании формы любым из цветов: colorValue1/2
Jeer (2008-12-19 15:33:00) [35]*.DrawCell(ACol, ARow: Longint;
//
if FZebra and Odd(ARow) then begin
Brush.Color := FZebraColor;
Font.Color := FZebraFontColor;
end;
//
Виталий Панасенко (2008-12-19 15:30:00) [36]if Color = ColorValue1 then
Color := ColorValue2
else
Color := ColorValue1;
Правильный$Вася (2008-12-19 15:29:00) [37]можно
не использовать RecNo, использовать специальное поле в выборке, нумерующее отсортированную выборку