Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.02.08;
Скачать: [xml.tar.bz2];

Вниз

Неправильно-полосатый 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.006 c
15-1229401940
Клод
2008-12-16 07:32
2009.02.08
Видео на двд


15-1229107648
yri
2008-12-12 21:47
2009.02.08
gps навигация


4-1204707100
alexnov
2008-03-05 11:51
2009.02.08
Как получить инфу о модели монитора без дров для него?


2-1230040637
Pavel
2008-12-23 16:57
2009.02.08
Подключение к базе данных


15-1229096167
NailMan
2008-12-12 18:36
2009.02.08
Как упростить Start/Stop сервисов в Win?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский