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

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

Неправильно-полосатый Grid [D7, ADS]


Страницы:   1 2

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, использовать специальное поле в выборке, нумерующее отсортированную выборку


Страницы:   1 2

Наверх

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