Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Закрасить выделенную строку своим цветом


Автор: Нитонисе 24.5.2013, 23:01
Есть таблица StringGrid. Выделяю строку и хочу чтобы она при этом закрашивалась нужным мне цветом. Знаю что есть опция выделения строки, но при этом невозможно редактировать ячейки в этой строке, поэтому мне эта опция не подходит. Делаю вот так - получается ерунда.
Код

void __fastcall TForm1::StringGrid1Cell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State)
{

    if (StringGrid1->Row == ARow) StringGrid1->Canvas->Brush->Color=clRed;
    else StringGrid1->Canvas->Brush->Color=clWhite;

    StringGrid1->Canvas->Font->Color=clBlack;
    StringGrid1->Canvas->FillRect(Rect);

    DrawText(StringGrid1->Canvas->Handle,
             StringGrid1->Cells[ACol][ARow].t_str(),
             StringGrid1->Cells[ACol][ARow].Length(),
             &Rect,
             DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}

Автор: Нитонисе 24.5.2013, 23:16
Вопрос решился так:
Код

void __fastcall TFMain::StringGrid1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
    StringGrid1->Refresh();
}
//---------------------------------------------------------------------------
void __fastcall TFMain::StringGrid1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
    if (Shift.Contains(ssLeft)) StringGrid1->Refresh();
}

Просто обновляю грид на событиях когда раскраска сбивалась.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)