Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разноцветный DBGrid 
:(
    Опции темы
MacTep
  Дата 2.7.2005, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



Привет всем! Хочу сделать так, чтобы цвет строчек в DBGrid был разным. Т.е., допустим, первая строчка светло серая, вторая темно серая, и так далее. Вот код:

Код

...

type TMyDBGridEh = class(TDBGridEh)
  property DataLink;
  property UpdateLock;
end;

...

procedure TForm1.DBGridEh1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumnEh;
  State: TGridDrawState);
var index: Integer;
    Marked, Selected: Boolean;

begin
  Marked:=False;
  if (dgMultiSelect in DBGridEh1.Options)and
  (TMyDBGridEh(DBGridEh1).Datalink.Active) then

Marked:=DBGridEh1.SelectedRows.Find(TMyDBGridEh(DBGridEh1).Datalink.Datasource.Dataset.Bookmark, index);
  Selected:=(TMyDBGridEh(DBGridEh1).Datalink.Active) and (DBGridEh1.Row-1 =TMyDBGridEh(DBGridEh1).Datalink.ActiveRecord);

  // цвет строки в зависимости от ее номера
  if Main.RecNo mod 2=0 then
    DBGridEh1.Canvas.Brush.Color:=RGB(224,234,243)
  else
    DBGridEh1.Canvas.Brush.Color:=RGB(237,242,249);
  // цвет букв
  DBGridEh1.Canvas.Font.Color:=RGB(14,69,121);
  // если выделена строка
  if Selected then
    DBGridEh1.Canvas.Brush.Color:=RGB(169,184,201);
  // перерисовка DBGridEh1
  DBGridEh1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;


Все отлично работает! Но когда мне надо сделать выборку в данной базе, то происходит следующее: номера записей различны и какие-то записи подсвечиваются в таблице светло-серым, а какие-то темно-серым цветом, т.е. не по порядку, а вразнобой. Может идти 3 светло-серых строки, а потом 5 темно-серых. А мне надо, чтобы и во всех режимах работы DBGrid чередовался цвет строк. Как этого добиться? Пытался меня строку:

Код

if Main.RecNo mod 2=0 then

на
Код

if DBGridEh1.Row mod 2=0 then

но это мне не подходит. Работает в таком случает программа как-то странно... Посоветуйте, пожалуйста, что-нибудь!


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
~FoX~
Дата 4.7.2005, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 4
Всего: 68



MacTep
Придется перерисовывать каждый раз при выборке.


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
MacTep
Дата 4.7.2005, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



~FoX~, каким же образом перерисовывать? Я же смотрю по номеру записи, а номер записи всегда фиксирован!


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
offline
Дата 4.7.2005, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Если хочешь сделать "зебру" из DBGrid, то перейди на EHLib (GridEh), там и пример есть, как "зебра" делается
PM MAIL   Вверх
~FoX~
Дата 4.7.2005, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 4
Всего: 68



kirilllius Так он и юзает ehLib
Цитата(MacTep @ 3.7.2005, 00:08)
DBGridEh1


MacTep
Ты каким макаром выборку делаешь?
Если хочешь зебру надо смотреть не на номер записи в БД, а на номер записи в рекордсете.



--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
offline
Дата 4.7.2005, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Ну так пусть смотрит первый пример, а именно вкладка DBLIST, чеквокс Dichromatic
PM MAIL   Вверх
MacTep
Дата 4.7.2005, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



Цитата(kirilllius @ 4.7.2005, 12:52)
Ну так пусть смотрит первый пример, а именно вкладка DBLIST, чеквокс Dichromatic
Там написано, мол, DBGridEh1.Invalidate; А вот откуда это взялось - не монимаю! smile



--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
offline
Дата 4.7.2005, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Вот код на событие onGetCellParams у грида

Взято из примера

Код

procedure TForm1.dbgListGetCellParams(Sender: TObject; Column: TColumnEh;
  AFont: TFont; var Background: TColor; State: TGridDrawState);
begin
  if cbDichromatic.Checked then
    if dbgList.SumList.RecNo mod 2 = 1 then
      Background := $00FFC4C4
    else
      Background := $00FFDDDD;
end;

PM MAIL   Вверх
korotkov
Дата 26.4.2007, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 17.6.2006

Репутация: нет
Всего: нет



>Вот код на событие onGetCellParams у грида
в этом случае чепуха при фильтрации получается

FIBPlus 6.4 + EhLib 4.1 Build 4.1.4 Russian version

при применении фильтра полосатость EhDBGrida исчезает, но при отмене фильтра также не появляется :(

как это побороть?

   Added OddRowColor and EvenRowColor property to draw odd and even
   rows with different colors. It works only if sequence numbers are available
   for DataSet(DataSet.IsSequenced = True) and DataSet.RecNo return valid info.

неужели нет решения?

хотябы полосатость вернуть при отмене фильтра и то уже дело - отличать фильтрованные данные от полных, но как!?

Это сообщение отредактировал(а) korotkov - 26.4.2007, 09:06
PM MAIL WWW ICQ   Вверх
SergeBS
Дата 26.4.2007, 07:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 11
Всего: 22



korotkov, 
DelphiKingdom - статья "Разноцветный DBGrid". В DRKB тоже есть.
PM MAIL   Вверх
korotkov
Дата 26.4.2007, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 17.6.2006

Репутация: нет
Всего: нет



Цитата(SergeBS @ 26.4.2007,  07:34)
korotkov, 
DelphiKingdom - статья "Разноцветный DBGrid". В DRKB тоже есть.


Разноцветный D B G R I D
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=168

По следам «полосатого DBGrid»
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1193

Дополнение по теме 'полосатый DBGrid'
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=170

>и что такое DRKB?
http://www.drkb.ru/
скачать не могу, сижу на GSM GPRS инете :(

интересует полосатая раскраска EhDBGrid именно при фильтрации и после, а не раскраска отдельных ячеек и их текста в зависимости от значения ячейки, это мы умеем ;)

Это сообщение отредактировал(а) korotkov - 26.4.2007, 09:05
PM MAIL WWW ICQ   Вверх
Rodman
Дата 26.4.2007, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Код


procedure TFrmShowOrg.DBGrdDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  if(DataCol=0)then
    Inc(StrNum);
  if (strnum mod 2=0)then
  begin
    DBGrd.Canvas.Font.Color := clBlack;
    DBGrd.Canvas.Brush.Color:= clCream;
  end
  else
  begin
    DBGrd.Canvas.Font.Color := clBlack;
    DBGrd.Canvas.Brush.Color:= clWhite;
  end;
  DBGrd.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;


я так делал...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
korotkov
Дата 26.4.2007, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 17.6.2006

Репутация: нет
Всего: нет



если можно поясни идею if(DataCol=0)then Inc(StrNum);

что есть StrNum когда он а обнуляется?
PM MAIL WWW ICQ   Вверх
Rodman
Дата 26.4.2007, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



это для чередования строк, грид рисует каждый в каждой строке столбцы, а потом переходит на следующую строку...

просто поэкспериментируй и увидишь разницу...

Покрайней мере я другого методы не нашел... 
PM MAIL WWW Skype GTalk YIM MSN   Вверх
korotkov
Дата 26.4.2007, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 17.6.2006

Репутация: нет
Всего: нет



... это понятно что чередования , не понятна химия if(DataCol=0)then Inc(StrNum); и где, когда обнуляется StrNum???

этим ты поборол неполосатость при фильтрации и при снятии фильтра или просто сделал полосатую таблицу? так с версии 3.6 она делается полосатой штатными средствами.

Это сообщение отредактировал(а) korotkov - 26.4.2007, 12:25
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1091 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.