powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как покрасить попарно строки DBGrid?
25 сообщений из 32, страница 1 из 2
Как покрасить попарно строки DBGrid?
    #32629345
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как красить строки DBGrid, если выполняется условие, я знаю.
Сейчас стоит задача покрасить строки DBGrid-а попарно: т.е. первые
две строки в один цве, а вторые две - в другой, а дальше по аналогии.
Можно ли это сделать?
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32629417
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно хоть так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender,
      const TRect &Rect, int DataCol, TColumn *Column,
      TGridDrawState State)
{

    if (DataCol <  2  ) DBGrid1->Canvas->Brush->Color = clRed;
    if (DataCol >  2  ) DBGrid1->Canvas->Brush->Color = clGreen;
   DBGrid1->DefaultDrawColumnCell(Rect, DataCol, Column, State);
}





 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32629671
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JibSkeart я попробовал твой код. У меня покрасились 1,2 столбцы
в красный, 3 - по умолчанию, 4-8 - в зеленый. Но цвет солбцов я мого
установить и в свойствах DBGrid-a. А мне же нужно покрасить строки(!)
попарно. Просто каждая пара это, скажем одна группа. Чтобы их не путать
или они не сливались в тексте, я и хочу покрасить их в один цвет, а следующую пару строк(четную) в другой. Т.е. всего два цвета.
Кол-во строк всегда четное!
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32629683
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а понял не столбцы а строки :))
а если так ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender,
      const TRect &Rect, int DataCol, TColumn *Column,
      TGridDrawState State)
{

   if ( DBGrid1->DataSource->DataSet->RecNo% 2  ==  0 )
   {  
     DBGrid1->Canvas->Brush->Color = clBlue;
   }
   else
   {
     DBGrid1->Canvas->Brush->Color = clGreen;
   }
   DBGrid1->DefaultDrawColumnCell(Rect, DataCol, Column, State);
}


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32630059
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извини это не совсем то. Хотя это правильно, но я работаю с фильтрованным
набором данных и DBGrid1->DataSource->DataSet-> RecNo %2 здесь
не подходит из-за того, что RecNo не идут подряд. Используя твой код я получил закрашенными то 1, то 2, то 3 строки ...
Здесь бы всё решилось, если бы можно было покрасить непосредсвенно строки DBGrid1(по две штуки), не применяя ни каких условий к таблице.
Применить условие к паре конечно можно, если DBGrid1DrawColumnCell
сравнивать текущую строку со следующей(у них два параметра должны совпадать). Но я не представляю как это сделать в DBGrid1DrawColumnCell.
Короче как бы покрасить в DBGrid четные и нечетные пары?
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32630219
123456789098
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин ... на основании всего написанного проще простого сделать то что нужно.
Скажем вот так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
// ---------------------------------------------------------------------------
 
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender,
      const TRect &Rect, int DataCol, TColumn *Column,
      TGridDrawState State)
{
    if (int((DBGrid1->DataSource->DataSet->RecNo+ 1 )/ 2 )% 2  ==  0 ) DBGrid1->Canvas->Brush->Color = clRed;
     DBGrid1->DefaultDrawColumnCell(Rect, DataCol, Column, State);

}
//---------------------------------------------------------------------------
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32631118
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опять та же ерунда. Снова покрашено через строку, потом по парам, потом через строку, затем три и ...т.д. Я же говорю, что нельзя здесь пользоваться
DataSource->DataSet->RecNo, т.к. записи одной пары в реальной таблице
(а не в фильтрованной, для которой и решаем вопрос закраски) не обязательно находятся рядом. Использовать как-то нормально RecNo
не получится. В DBGrid же пары стоят упорядоченно друг за другом,
но скажем у первой пары RecNo 1-Й записи 12345, а у 2-й 12348. У второй
пары 12422 и 12423. Короче здесь закономерности нет! Если бы у тебя был
нормальный ящик, я бы тебе отправил скриншот того что получается по
твоему коду.
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32631167
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну тогда надо как то по другому изголятся :)


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32631180
123456789098
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я понял о чем ты нговоришь. сейчас поковыряю что можно сделать... ведь на верняка можно.
а почтовый ящик у меня очень даже реальный хотя и выглядит странновато
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32631287
123456789098
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот скажем есть такой вариант.
алгоритм конечно не оптимальный, но здесь главное принцип



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
// ---------------------------------------------------------------------------
 
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender,
      const TRect &Rect, int DataCol, TColumn *Column,
      TGridDrawState State)
{
//получаем высоту строки заголовков полей
   TFont *CF=DBGrid1->Canvas->Font;
   DBGrid1->Canvas->Font=DBGrid1->TitleFont;
   int TitleHeight=DBGrid1->Canvas->TextHeight("Name")+ 5 ;
   DBGrid1->Canvas->Font=CF;

//на основании координат области выделенной для рисования ячейки
//а так же на основании ранее расчитанной высоты заголовка
//вычисляем номер сроки в гриде
   int dbg_RecNo=int((Rect.Top-TitleHeight)/Rect.Height())+ 1 ;
   if (int((dbg_RecNo+ 1 )/ 2 )% 2  ==  0 ) DBGrid1->Canvas->Brush->Color = clRed;
     DBGrid1->DefaultDrawColumnCell(Rect, DataCol, Column, State);

}
//---------------------------------------------------------------------------
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32631386
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я тоже хотел предложить этот вариант ,но у меня он что то как то криво выводит :)

 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32631387
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SCORPION Z
Здесь бы всё решилось, если бы можно было покрасить непосредсвенно строки DBGrid1(по две штуки), не применяя ни каких условий к таблице.
Применить условие к паре конечно можно, если ...
сравнивать текущую строку со следующей(у них два параметра должны совпадать). ...
Короче как бы покрасить в DBGrid четные и нечетные пары?

У меня есть такое предложение: ввести в таблицу/курсор поле Color, в которое складывать значения цвета строки.
Перед выдачей данных необходимо пробежаться по базе (с учетом фильтра) и сложить в это поле (Color) необходимые значения цвета. А в DBGrid'е использовать это значение для раскрашивания строк... Конечно, это несколько замедлит работу с базой и выдачу первой порции данных...
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32631457
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Станислав C. С твоим предложением не разобрался - для меня это
пока сложно для понимания.

2. 123456789098 Попробовал твой последний код... .
Короче 1-я строка-красная, 2-я - обычная, затем 8 пар красная/обычная,
а после все красные! Но интерессный момент. Когда я ставлю указатель в конец DBGrid-a и начинаю скролировать вверх, то все последние-красные записи начинают перекрашиваться попарно, как и положено. При скролировании по 8-ми парам красная/обычная - они перекрашиваются все
в обычный цвет! При скролировании вниз - история повторяется, как описано
первоначально.
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32631489
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Небольшие уточнения!
" а после все красные " - это те те записи, которые чтобы увидеть
нужно проскролировать DBGrid1 (т.е. записи невидимые при первой покраске)!
"скролировать вверх" - не мышью(!), а стрелками. При скролировании мышью
цвет ячеек не меняется.
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32631490
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SCORPION Z1. Станислав C. С твоим предложением не разобрался - для меня это
пока сложно для понимания.

2. 123456789098 Попробовал твой последний код... .
Короче 1-я строка-красная, 2-я - обычная, затем 8 пар красная/обычная,
а после все красные! Но интерессный момент. Когда я ставлю указатель в конец DBGrid-a и начинаю скролировать вверх, то все последние-красные записи начинают перекрашиваться попарно, как и положено. При скролировании по 8-ми парам красная/обычная - они перекрашиваются все
в обычный цвет! При скролировании вниз - история повторяется, как описано
первоначально.

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

А Станислав C. тобе дело говорит
заведи в таблице поле числовое , где
храни либо цвет , либо 1 ,0
и потом при выводе если цвет то цвет :) , а если 1 то один цвет, 0 то другой
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32631498
123456789098
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
скролить я не пробовал ...
ну да ничего и это можно победить. шас посмотрю
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32631577
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JibSkeartзаведи в таблице поле числовое , где
храни либо цвет , либо 1 ,0
и потом при выводе если цвет то цвет :) , а если 1 то один цвет, 0 то другой
Понятно. Но ради пару сотен записей из 80тыс - это не рентабельно.

int dbg_RecNo=int((Rect.Top-TitleHeight)/Rect.Height())+1;

Нужно не Rect.Height())+1, а + 2 , т.к. нумерация нгаверное с 0, а не 1.
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32631643
123456789098
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вся фигня в том что при прокручивании все достаточно умно прорисовысается ... когда крутишь вверх, то картинка просто передвигается вверх на высоту передвинутой строки (строк), добавленная(ые) строка(ки) прорисовываются на освободившемся месте.
.. но это все мелочи.самое главное то что сама канва у грида имеет именно такой размер как видимая область грида, а не такая как показано скролбарами и поэтому строка идущая сразу за заголовком полей всегда будет первой (в смысле если рассчитывать № строки указанным мной методом) не важно что она на самом деле будет сотой ...
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32631727
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Честно говоря я прозрел. Такие факты для меня были не известны.

А под активной строкой, если она не красная, а белая (по умолчанию) у тебя ничего не видно
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32632322
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SCORPION Z JibSkeartзаведи в таблице поле числовое , где
храни либо цвет , либо 1 ,0
и потом при выводе если цвет то цвет :) , а если 1 то один цвет, 0 то другой
Понятно. Но ради пару сотен записей из 80тыс - это не рентабельно.

А если сделать выборку (Select) по нужным тебе условиям, а дальше применить то, что я предложил ?
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32632655
Имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если попробовать как-нить так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
int ddd= 0 , ccc= 1 ;
void __fastcall TFcountr::DBGrid1DrawColumnCell(TObject *Sender,
      const TRect &Rect, int DataCol, TColumn *Column,
      TGridDrawState State)
{
  if((ddd+ccc)% 2  ==  0 )
    DBGrid1->Canvas->Brush->Color = clBlue;
  else
    DBGrid1->Canvas->Brush->Color = clRed;

    if(ccc> 2 )
     ccc =  1 ;
    else
     ccc++;
   ddd ++;

 DBGrid1->DefaultDrawColumnCell(Rect, DataCol, Column, State);
}

получается 3 через 3...
но можно придумать как задать условия, чтоб получилось 2 через 2.
сам принцип такой не покатит?
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32632683
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ты кол-во колонок знаешь ?
так как d будет увеличиватся , от прорисовки каждой колонки ...


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32632747
Имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и на здоровье ... пусть растет...
можно где-нить в он_форм_рефреш его обнулить ...
да или просто добавить еще одно условие
if(ddd == 16 || == 10 || == 122)
ddd = 0;

а сам прицип-то использования левых переменных - плох?
или нет? сам не пойму )
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32632924
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

а сам прицип-то использования левых переменных - плох?
или нет? сам не пойму )


Но а если деваться некуда то как быть ??


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Как покрасить попарно строки DBGrid?
    #32632948
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имя пользователя по твоему коду получается очень красивая,
ступенчатая закраска. Но при серолировании грида или при кликах по
записям - цвет ячеек меняется.
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как покрасить попарно строки DBGrid?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]