Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Изменение цвета строки

5.0K
24 мая 2004 года
Micle1
19 / / 16.04.2004
Как изменить цвет строки в StringGrid или какой лучше использовать для этого компонент?

Заполняю StringGrid. По мере заполнения, в зависимости от содержания, некоторые строки надо выделять цветом.
Проделываю следующее:

void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
StringGrid1->Canvas->Brush->Color=clRed;
StringGrid1->Canvas->Font->Color = clYellow;
StringGrid1->Canvas->Font->Style = TFontStyles() << fsBold;
}

но ничего не изменяется, кроме выделяющего пунктирного курсора ячейки, которую кликаю. :???:
621
25 мая 2004 года
Бешеный кролик
151 / / 23.03.2004
Смотри, как сделал я:

void __fastcall TValueTypes::StringGrid1DrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
AnsiString text=StringGrid1->Cells[ACol][ARow];
double ww;
if (State.Contains(gdFixed)) // Если заголовок
{
StringGrid1->Canvas->Brush->Color=clMoneyGreen;
StringGrid1->Canvas->Font->Name="Times New Roman";
StringGrid1->Canvas->Font->Color=clBlack;
StringGrid1->Canvas->Font->Size=16;
StringGrid1->Canvas->FillRect(Rect);
// Чтобы текст заголовка был по центру
///////////////
ww=StringGrid1->Canvas->TextExtent(text).cx;
StringGrid1->Canvas->TextRect(Rect,Rect.Left+(Rect.Width()-ww)/2.0, Rect.Top, text);
///////////////////
return;
}
else // Если не заголовок
{
StringGrid1->Canvas->Pen->Color=clBlack;
if (State.Contains(gdSelected)) StringGrid1->Canvas->Brush->Color=clSkyBlue+450;
else StringGrid1->Canvas->Brush->Color=clCream;
StringGrid1->Canvas->Font->Name="Times New Roman";
StringGrid1->Canvas->Font->Style=TFontStyles();
StringGrid1->Canvas->Font->Color=clNavy;
StringGrid1->Canvas->Font->Size=12;
StringGrid1->Canvas->FillRect(Rect);
StringGrid1->Canvas->FrameRect(Rect);

ww=StringGrid1->Canvas->TextExtent(text).cx;
StringGrid1->Canvas->TextRect(Rect,Rect.Left, Rect.Top, text);
}

}

И сделай толщину сетки 2 пикселя, будет симпатичнее.

Да, не забудь OwnerDraw отключить.

К сожалению не знаю, как изменить цвет линий сетки, если додумаешься - дай знать.
5.0K
26 мая 2004 года
Micle1
19 / / 16.04.2004
Заполняю StringGrid. По мере заполнения проверяю 6-ую колонку. Если 6-я ячейка новой записи/строки повторяет 6-ю ячейку любой из предшествующих записей, то эти строки полностью нужно выделить цветом. Делаю так:


TStringList *sl=new TStringList;
sl->Assign(StringGrid1->Cols[6]);
if(sl->Strings[ARow].IsEmpty())
sl->Strings[ARow]="zzz";
else
sl->Strings[ARow]=EmptyStr;
int CellsIndex=sl->IndexOf(StringGrid1->Cells[ACol][ARow]);
delete sl;
if(CellsIndex>=0)
{//есть повторения
StringGrid1->Canvas->Font->Color=clRed;
StringGrid1->Canvas->FillRect(Rect);
StringGrid1->Canvas->TextOut(Rect.Left+5,Rect.Top+1,StringGrid1->Cells[ACol][ARow]);
}

Но закрашивается (при совпадении) полностью только проверяемя строка и шестая ячейка совпадающей строки, которая тоже должна быть полностью закрашена. Что не так? :???:
5.0K
27 мая 2004 года
Micle1
19 / / 16.04.2004
Цитата:
Originally posted by Micle1

Но закрашивается (при совпадении) полностью только проверяемя строка и шестая ячейка совпадающей строки, которая тоже должна быть полностью закрашена. Что не так?



Для тех кому интересно...
На самом деле оказался сущий пустяк. Там где заполняется StringGrid, в конце надо добавить:
StringGrid1->Refresh();
Закрасятся полностью обе совпадающие строки.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог