Поиск:

Ответ в темуСоздание новой темы Создание опроса
> подстветка строки в StringGrid 
V
    Опции темы
freshAngel
  Дата 2.2.2009, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 1.10.2008

Репутация: нет
Всего: нет



Привет.
Пробую сделать, чтобы при нажатии на ячейку StringGrid'a закрашивалась вся строка.
Например цвет первой строки по умолчанию белый. Щелкаю на ячейку первая строка окрасилась, например в желтый.
Щелкаю на вторую строку таблицы. Теперь она окрасилась в желтый, а остальные строки стали белыми.
Делаю так:

В событии OnDrawCell StringGrid'a:
Код

if(ARow == 0) // Как здесь передать ссылку на строку, которую выбрали!!?
  {
  Form2->StringGrid2->Canvas->Brush->Color = clYellow;
  Form2->StringGrid2->Canvas->Font->Color  = clBlack;
  Form2->StringGrid2->Canvas->FillRect(Rect);
  Form2->StringGrid2->Canvas->TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Form2->StringGrid2->Cells[ACol][ARow]);
  }
  else
{
 Form2->StringGrid2->Canvas->Brush->Color = clWhite;
  Form2->StringGrid2->Canvas->Font->Color  = clBlack;
  Form2->StringGrid2->Canvas->FillRect(Rect);
  Form2->StringGrid2->Canvas->TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Form2->StringGrid2->Cells[ACol][ARow]);
}


Интересует два вопроса:
Правильный это метод окрашивания строки, или нет!?
Как этому событию передать ссылку (номер) на строку которую я выбрал и которую нужно окрасить!?


Это сообщение отредактировал(а) freshAngel - 2.2.2009, 16:11
PM MAIL   Вверх
taiven
Дата 2.2.2009, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 3
Всего: 9



Код


void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
      int ARow, bool &CanSelect)
{
    StringGrid1->Invalidate();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow,
      TRect &Rect, TGridDrawState State)
{
    if(ARow == StringGrid1->Row)
    {
        if(ACol > 0)
        {
            StringGrid1->Canvas->Brush->Color = clYellow;
            StringGrid1->Canvas->FillRect(Rect);
            StringGrid1->Canvas->TextRect(Rect, Rect.Left + 2, Rect.Top + 2,
                                          StringGrid1->Cells[ACol][ARow]);
        }
    }
}

PM   Вверх
freshAngel
Дата 2.2.2009, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 1.10.2008

Репутация: нет
Всего: нет



taiven, большущее человеческое спасибо!
PM MAIL   Вверх
freshAngel
Дата 3.2.2009, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 1.10.2008

Репутация: нет
Всего: нет



Все гуд!
Только вот при таком методе подсветки строки, текст в ячейках нулевого столбца все время затирается.

Код

void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
      int ARow, bool &CanSelect)
{
    StringGrid1->Invalidate();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow,
      TRect &Rect, TGridDrawState State)
{
    if(ARow == StringGrid1->Row)
    {

            StringGrid1->Canvas->Brush->Color = clYellow;
            StringGrid1->Canvas->FillRect(Rect);
            StringGrid1->Canvas->TextRect(Rect, Rect.Left + 2, Rect.Top + 2,
                                          StringGrid1->Cells[ACol][ARow]);
        }
    }



Просто желтая ячейка.
Это наверное связано с тем, что метод перерисовки Invalidate() для StringGrid'а вызывается в свойстве onSelectCell, поэтому когда "побегаешь" по остальным ячейкам таблицы, тест в ячейках нулевого столбца тоже видно.
Или просто C++ Builder пытается выделить синим ячейку!?
Как можно это исправить!? Что - бы строка подсвечивалась как нужно и был виден текст в ячейках.
PM MAIL   Вверх
taiven
Дата 3.2.2009, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 3
Всего: 9



прикрепи лучше скрин, а то так не совсем понятно, что ты имеешь в виду.

Это сообщение отредактировал(а) taiven - 3.2.2009, 22:11
PM   Вверх
freshAngel
Дата 3.2.2009, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 1.10.2008

Репутация: нет
Всего: нет



Цитата(taiven @ 3.2.2009,  21:57)
прикрепи лучше скрин, а то так не совсем понятно, что ты имеешь ввиду.

Конечно.
Это начальное состояние грида, при запуске программы.

user posted image

А вот, если побегать по ячейкам таблицы.

user posted image

Такая "затирка" текста  происходят на выделенной в данный момент ячейки, если "побегать" по остальным ячейкам грида, все отрисовывается нормально.

Это сообщение отредактировал(а) freshAngel - 3.2.2009, 22:19
PM MAIL   Вверх
taiven
Дата 4.2.2009, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 3
Всего: 9



Код

void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow,
      TRect &Rect, TGridDrawState State)
{
    if(ARow == StringGrid1->Row)
    {

            if(ACol == StringGrid1->Col)
            {
                StringGrid1->Canvas->Font->Color = clWhite;
                StringGrid1->Canvas->Brush->Color = clNavy;
            }
            else
            {
                StringGrid1->Canvas->Font->Color = clBlack;
                StringGrid1->Canvas->Brush->Color = clYellow;
            }

            StringGrid1->Canvas->FillRect(Rect);
            StringGrid1->Canvas->TextRect(Rect, Rect.Left + 2, Rect.Top + 2,
                                          StringGrid1->Cells[ACol][ARow]);
    }
}


Это сообщение отредактировал(а) taiven - 4.2.2009, 01:29
PM   Вверх
freshAngel
Дата 7.2.2009, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 1.10.2008

Репутация: нет
Всего: нет



Спасибо.
Теперь все работает!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0457 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.