Поиск:

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


Новичок



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

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



Добрый день!

Когда помещаем стринггрид на форму, его первая ячейка (не фиксированная) автоматически закрашивается в синий цвет, и при последующем выделение ячеек переходит на выделенную ячейку. 
Как убрать это выделение?
Только через обработчик события OnDrawCell или есть более простые варианты.

Я формирую GridPanel и в одной из ячеек использую StringGrid, поэтому хочется сделать это как можно проще...
PM MAIL WWW   Вверх
sawfish
Дата 12.2.2012, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

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



Вообще убрать? В Options есть goDrawFocusSelected:
Цитата

Cells with input focus are drawn with a special highlight color, just like selected cells without input focus. If goDrawFocusSelected is not included, the cell with input focus is distinguished by a focus rectangle, not by a special background color.

но вроде всё равно прямоугольник фокуса (пунктиром) будет отрисовываться.
Так что, OnDrawCell рулит.
PM MAIL   Вверх
Volfs
Дата 12.2.2012, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(sawfish @  12.2.2012,  16:03 Найти цитируемый пост)
Так что, OnDrawCell рулит. 


что бы в ГридПанель программно подставлять готовый компонент и не мучатся с настройкой стрин грида решил модифицировать компонент СтрингГрид и переопределить событие OnDrawCell.

Вот на этом этапе возникли вопросы, мне нужно переопределять событие или метод..?

Пробу следующий код, но пока работает плохо.

конструктор:
Код

__fastcall TStringGridForGP::TStringGridForGP(TComponent* Owner) : TStringGrid(Owner)
{
this->DefaultDrawing = false;
this->FixedColor = 0;
this->FixedRows = 0;
this->RowCount = 3;
this->ColCount = 3;
this->ScrollBars = false;
this->Options << goEditing;
}


Переопределение метода DrawCell (файл hpp)
Код

public:
        ...
    virtual void __fastcall DrawCell(int ACol, int ARow, const Types::TRect &ARect, TGridDrawState AState);


Код метода 
Код

void __fastcall TStringGridForGP::DrawCell(int ACol, int ARow, const Types::TRect &ARect, TGridDrawState AState)
{
  TCanvas* SGCanvas = this->Canvas;

  SGCanvas->Brush->Color = this->Color;
  SGCanvas->Font->Color = this->Font->Color;
  SGCanvas->FillRect(ARect);

   // вывод ТЕКСТА
  UINT uFormat = DT_SINGLELINE | DT_VCENTER | DT_CENTER;
  DrawText(this->Canvas->Handle,
        this->Cells[ACol][ARow].c_str(),
        this->Cells[ACol][ARow].Length(),
        &ARect,
        uFormat
        );

    TStringGrid::DrawCell(ACol, ARow, ARect, AState);
}

PM MAIL WWW   Вверх
sawfish
Дата 13.2.2012, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

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



Цитата

мне нужно переопределять событие или метод..?

Думаю, что метод.
PM MAIL   Вверх
Volfs
Дата 14.2.2012, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(sawfish @  13.2.2012,  18:18 Найти цитируемый пост)
Думаю, что метод. 


Да метод

вот код рабочего метода, еще немного отточить и будет супер)))
Код

void __fastcall TStringGridForGP::DrawCell(int ACol, int ARow, const Types::TRect &ARect, TGridDrawState AState)
{
  // рисуем нормальные ячейки
  this->Canvas->Brush->Color = this->Color;
  this->Canvas->Font->Color = this->Font->Color;
  this->Canvas->FillRect(ARect);

  // Рисуем рамку выделения
  if ( AState.Contains(gdFocused) ) DrawFocusRect(this->Canvas->Handle, &ARect);


   // вывод ТЕКСТА
  UINT uFormat = DT_SINGLELINE | DT_VCENTER | DT_CENTER;
  DrawText(this->Canvas->Handle,
        this->Cells[ACol][ARow].c_str(),
        this->Cells[ACol][ARow].Length(),
        &ARect,
        uFormat
        );
}
 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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