Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.02.08;
Скачать: CL | DM;

Вниз

Неправильно-полосатый Grid   Найти похожие ветки 

 
kyn66 ©   (2008-12-19 15:25) [0]

Уважаемые мастера, представляя информацию из таблицы в 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 не совпадает с номером по ключу. Можно-ли это как побороть, чтобы полоски следовали в четкой последовательности?


 
Правильный$Вася   (2008-12-19 15:29) [1]

можно
не использовать RecNo, использовать специальное поле в выборке, нумерующее отсортированную выборку


 
Виталий Панасенко   (2008-12-19 15:30) [2]

if Color = ColorValue1 then
 Color := ColorValue2
else
 Color := ColorValue1;


 
Jeer ©   (2008-12-19 15:33) [3]

*.DrawCell(ACol, ARow: Longint;
//
  if FZebra and Odd(ARow) then  begin
      Brush.Color := FZebraColor;
      Font.Color  := FZebraFontColor;
  end;
//


 
Виталий Панасенко   (2008-12-19 15:34) [4]

Color - глобальная переменная(или поле), инициализируемая при создании формы любым из цветов: colorValue1/2


 
kyn66 ©   (2008-12-19 15:37) [5]


> не использовать RecNo, использовать специальное поле в выборке,
>  нумерующее отсортированную выборку

Да действительно, сработало. Но в данном случае так попало, что у меня в ключе цифровое поле.

 Background := BackColors[DM1.SvodTVLTblTir.Value mod 2 <> 0];

А если не цифровое? А если цифры не по порядку идут? Еще варианты есть? За первый спасибо.


 
Jeer ©   (2008-12-19 15:39) [6]


> Виталий Панасенко   (19.12.08 15:34) [4]
>
> Color - глобальная переменная(или поле), инициализируемая
> при создании формы любым из цветов: colorValue1/2


Не в курсе, что не стоит использовать имена переменных, совпадающих с именами стандартных свойств ?


 
Jeer ©   (2008-12-19 15:40) [7]


> А если не цифровое? А если цифры не по порядку идут? Еще
> варианты есть? За первый спасибо.


Еще раз внимательно посмотри на [3]

Привязываемся к гриду, а не к датасету.


 
Виталий Панасенко   (2008-12-19 15:41) [8]

в курсе.. это пример, для наглядности, что где...


 
kyn66 ©   (2008-12-19 15:44) [9]


> Еще раз внимательно посмотри на [3]

На какое событие подвешено?


 
Jeer ©   (2008-12-19 15:51) [10]

*.DrawCell(ACol, ARow: Longint;...)


 
kyn66 ©   (2008-12-19 16:04) [11]


> *.DrawCell(ACol, ARow: Longint;...)


не нахожу такого события


 
Правильный$Вася   (2008-12-19 16:20) [12]


> kyn66 ©   (19.12.08 15:37) [5]

я говорил о СПЕЦИАЛЬНОМ поле, а не о ключе
и не о таблице, а о ВЫБОРКЕ


 
sniknik ©   (2008-12-19 21:24) [13]

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-20 01:14) [14]


> sniknik ©   (19.12.08 21:24) [13]

Ааа. Так вот что имелось в виду в том вопросе о номере строки в DBGrid http://delphimaster.net/view/2-1228492011/


 
kyn66 ©   (2008-12-20 10:26) [15]

>>sniknik
А в чем преимущества предложенного метода [13] ? Я использую DBGridEh1. А у него есть свое событие DrawDataCell . Что дает внедрение TDLDBGrid ?


 
Leonid Troyanovsky ©   (2008-12-20 12:09) [16]


> kyn66 ©   (20.12.08 10:26) [15]

> Что  дает внедрение TDLDBGrid ?

Доступ к DataLink.

> А у него есть свое событие DrawDataCell

Пользуй OnDrawColumnCell.

--
Regards, LVT.


 
kyn66 ©   (2008-12-20 13:22) [17]


> Пользуй 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 13:36) [18]


> kyn66 ©   (20.12.08 13:22) [17]

> событии идет отрисовка курсора в таблице.

Какого, на, курсора?
У тебя на этом событии бред записан.

--
Regards, LVT.


 
kyn66 ©   (2008-12-20 13:42) [19]


> У тебя на этом событии бред записан.

Для кого бред, а все правильно работает. Курсор.... Хм,. неужели здесь на форуме все такие умные, что про элементарное позабыли ? 8). Когда передвигаешься пл гриду вверх - вниз, курсор(гор-ая полоса цвета  clMoneyGreen) передвигается по гриду и текст становится жирным, если в фокусе. Проверь у ся это потом про бред говори!


 
Поросенок Винни-Пух ©   (2008-12-20 13:44) [20]

в ехлибе полосатость поддерживается самим гридом. и писать ничего не надо


 
kyn66 ©   (2008-12-20 13:56) [21]


> в ехлибе полосатость поддерживается самим гридом. и писать
> ничего не надо


Там есть особенность для полосатости, ща не помню точно, но не всегда подключается, уже проверял.


 
Leonid Troyanovsky ©   (2008-12-20 14:19) [22]


> kyn66 ©   (20.12.08 13:42) [19]

> Для кого бред, а все правильно работает. Курсор.... Хм,.
>  неужели здесь на форуме все такие умные, что про элементарное
> позабыли ? 8). Когда передвигаешься пл гриду вверх - вниз,
>  курсор(гор-ая полоса цвета  clMoneyGreen)

Я знаю два понятия курсора, которые могут быть связаны с гридом.
Но называть курсором  выделенную|текущую|активную строку|ряд|запись
не собираюсь. Потрудитесь выражать свои мысли точней.

А то, что в обработчике написан бред, станет Очевидно после того,
как ты прокомментируешь каждую из написанных там строк.

--
Regards, LVT.


 
kyn66 ©   (2008-12-20 14:35) [23]


> как ты прокомментируешь каждую из написанных там строк.

А не проще прикрутить к своему гриду и посмотреть результат. Хорошо, насчет "курсора" - согласен.


 
Leonid Troyanovsky ©   (2008-12-20 14:38) [24]


> kyn66 ©   (20.12.08 14:35) [23]

> А не проще прикрутить к своему гриду и посмотреть результат.

Видишь ли, Юра..

Во-первых, мне жалко мой грид.
Во-вторых, мне это и так очевидно.
В-третьих, разобраться-то нужно именно тебе.

--
Regards, LVT.


 
kyn66 ©   (2008-12-20 14:46) [25]


> В-третьих, разобраться-то нужно именно тебе.


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


 
Leonid Troyanovsky ©   (2008-12-20 15:52) [26]


> kyn66 ©   (20.12.08 14:46) [25]

>  при том что все работает, что требовалось от этого кода.

Бред бывает и правдоподобным.
Так, например, излагаются сверхценные идеи.

Что требовалось от каждой строки кода:

   if (Rect.Top = CellRect(Col, Row).Top) then
    begin
      Columns[1].Alignment  := taRightJustify;
      Columns[2].Alignment  := taRightJustify;

?
И почему закомментирован DefaultDrawColumnCell?

И где там "из рабочего кода"?

> Неужто нельзя просто сказать

А что тебе непонятного сказали?

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2008-12-20 16:18) [27]


> sniknik ©   (19.12.08 21:24) [13]

> type
>  TDLDBGrid = class(TDBGrid);

Пожалуй, что без полноценного потомка здесь не обойтись.

type
 TTDLDBGrid= class(TDBGrid)
  protected
    procedure Scroll(Distance: Longint); override;
  end;

procedure TDLDBGrid.Scroll;
begin
 inherited;
 Invalidate;
end;


--
Regards, LVT.


 
Leonid Troyanovsky ©   (2008-12-20 16:21) [28]


> Leonid Troyanovsky ©   (20.12.08 16:18) [27]

Ну, и, конечно, public property DataLink, sorry.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2008-12-20 16:44) [29]


> Германн ©   (20.12.08 01:14) [14]

> Ааа. Так вот что имелось в виду в том вопросе о номере строки
> в DBGrid

Нет, там имелся ввиду номер строки.

--
Regards, LVT.


 
kyn66 ©   (2008-12-23 11:36) [30]


> И почему закомментирован DefaultDrawColumnCell?


Он закомментирован в одном месте, и работает в другом. Т.е. как я понимаю, сперва отрабатывают дефолтовые настройки, а уж потом свои. Он сразу стоял там  где сейчас закоментирован. Хотя и так и так - одинаково работало ...

> TTDLDBGrid= class(TDBGrid)


А ничего, что у меня используется DBGridEh ?


 
Leonid Troyanovsky ©   (2008-12-23 16:19) [31]


> kyn66 ©   (23.12.08 11:36) [30]

> А ничего, что у меня используется DBGridEh ?

TTDLDBGrid = class (TDBGridEh)

--
Regards, LVT.


 
dbgrid   (2008-12-23 18:18) [32]


> Leonid Troyanovsky ©   (20.12.08 16:44) [29]

там нужно было передвигать курсор(БД-шный) за курсором мышки:)


 
Leonid Troyanovsky ©   (2008-12-23 18:31) [33]


> dbgrid   (23.12.08 18:18) [32]

> там нужно было передвигать курсор(БД-шный) за курсором мышки:

Моя твоя не понимать. См [22].

А во-ще
http://www.rsdn.ru/Forum/?mid=907742

--
Regards, LVT.


 
dbgrid   (2008-12-23 18:46) [34]


> Leonid Troyanovsky ©   (23.12.08 18:31) [33]


> http://www.rsdn.ru/Forum/?mid=907742

понимать-понимать...
а еще твоя хобби буквоедством заниматься - не раскроешь секрет "ну пачиму"?


 
Leonid Troyanovsky ©   (2008-12-23 19:05) [35]


> dbgrid   (23.12.08 18:46) [34]

> а еще твоя хобби буквоедством заниматься - не раскроешь
> секрет "ну пачиму"?

Плохо ты, брат, мадьяр знаешь!

Никакой я не буквоед, я Начинающим - как родная мама,
просто-таки сопли утираю :)

--
Regards, LVT.


 
dbgrid   (2008-12-23 19:20) [36]


> Leonid Troyanovsky ©   (23.12.08 19:05) [35]


> Плохо ты, брат, мадьяр знаешь!

эээ... что есть "мадьяр"?


> Никакой я не буквоед, я Начинающим - как родная мама,
> просто-таки сопли утираю :)

оплеухами?


 
Leonid Troyanovsky ©   (2008-12-23 19:44) [37]


> dbgrid   (23.12.08 19:20) [36]

> эээ... что есть "мадьяр"?

Мадьяр = венгр.
Гашека не читаем? Но, а в Пилзнер ходим.
Плохо-плохо.



Страницы: 1 вся ветка

Текущий архив: 2009.02.08;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.014 c
15-1229320470
desc
2008-12-15 08:54
2009.02.08
FloatToStr


6-1194536833
maxistent
2007-11-08 18:47
2009.02.08
"большие" ЕХЕ-файлы при использовании T[Server/Client]Socket


2-1230386119
studenttgata
2008-12-27 16:55
2009.02.08
как объявить константу в записи record


3-1214818168
Новичек
2008-06-30 13:29
2009.02.08
Как сделать обратную сортировку в TClientDataSet?


15-1228968454
Дуб
2008-12-11 07:07
2009.02.08
МВо - С Днем рождения!