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

Код: 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
30.07.2004, 15:26
    #32629671
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как покрасить попарно строки DBGrid?
JibSkeart я попробовал твой код. У меня покрасились 1,2 столбцы
в красный, 3 - по умолчанию, 4-8 - в зеленый. Но цвет солбцов я мого
установить и в свойствах DBGrid-a. А мне же нужно покрасить строки(!)
попарно. Просто каждая пара это, скажем одна группа. Чтобы их не путать
или они не сливались в тексте, я и хочу покрасить их в один цвет, а следующую пару строк(четную) в другой. Т.е. всего два цвета.
Кол-во строк всегда четное!
...
Рейтинг: 0 / 0
30.07.2004, 15:31
    #32629683
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как покрасить попарно строки DBGrid?
а понял не столбцы а строки :))
а если так ?

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

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


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



Код: 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
02.08.2004, 13:47
    #32631386
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как покрасить попарно строки DBGrid?
я тоже хотел предложить этот вариант ,но у меня он что то как то криво выводит :)

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

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

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

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

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

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

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

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

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

А если сделать выборку (Select) по нужным тебе условиям, а дальше применить то, что я предложил ?
...
Рейтинг: 0 / 0
03.08.2004, 11:02
    #32632655
Имя пользователя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как покрасить попарно строки DBGrid?
а если попробовать как-нить так:
Код: 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
03.08.2004, 11:11
    #32632683
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как покрасить попарно строки DBGrid?
а ты кол-во колонок знаешь ?
так как d будет увеличиватся , от прорисовки каждой колонки ...


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

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

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


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


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


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