C++builder 6, Stringgrid, Закраска ячеек в StringGrid

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
pavelslap
Сообщения: 2
Зарегистрирован: 27 ноя 2009, 21:28

Добрый день, ув. программисты! Вопрос именно по билдеру 6, т.к. в других версиях синтаксис может отличаться. Мне нужно по нажатии кнопки Button1, закрасить определённые ячейки в StringGrid, в котором уже сгенерирован двухмерный массив mas[X][Y].
Я пытался обрабатывать событие OnDrawCell, т.к. в нём есть необходимые параметры для закраски, но в таком случае:
1) Ячейки закрашиваются сразу после запуска программы, а мне надо по нажатии Button;
2) Поверх закрашеннных ячеек невозможно вывести текст.
Я работал вот с этим кодом:

Код: Выделить всё

void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect,
          TGridDrawState State)
{
 TStringGrid *p=(TStringGrid*)Sender;
 if (p->Cells[ACol][ARow]==" ") {
  p->Canvas->Brush->Color=clRed;
 } else {
  p->Canvas->Brush->Color=clGreen;
 }
 p->Canvas->FillRect(Rect);

}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 StringGrid1->Cells[1][2]=" ";
}
Помогите, пожалуйста его преобразовать, дополнить, или предложите свой вариант. Искренне надеюсь на Вас и Ваш форум. Заранее спасибо!
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

Какие проблемы: на кнопку ставишь какой-нибудь флаг, а в обработчике рисования OnDrawCell его проверяешь.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
IceFlame
Сообщения: 62
Зарегистрирован: 29 ноя 2009, 03:54

Выводить текст в ячейке должен тоже ты сам:
p->Canvas->TextOut(Rect.left,Rect.top,p->Cells[ACol][ARow]);
Можно использовать и TextRect.
Ответить