Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Цвет выбранной ячейки StringGrid'а 
V
    Опции темы
pafflique
Дата 12.1.2010, 03:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Закрашивает нужную ячейку, но та, что была закрашанна до этого, опять становится белой.. как запомнить все закрашивания??

Код

long left; long top;

void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
      int ARow, bool &CanSelect)
{
    TRect A = StringGrid1->CellRect(ACol, ARow);
    left = A.left;
    top = A.top;
}
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1Click(TObject *Sender)
{
    StringGrid1->Canvas->Brush->Color=clBlack;
    left = left / 25; top = top / 25;
    TRect A = StringGrid1->CellRect(left, top);
    StringGrid1->Canvas->FillRect(A);
}


Это сообщение отредактировал(а) pafflique - 12.1.2010, 03:46
PM MAIL   Вверх
Usper
Дата 12.1.2010, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну например так:
Код
#include <vector>
std::vector <std::vector <bool> > FGrid; //"матрица", в которой будем хранить свойство "покрашенности" ячейки
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
{
      StringGrid1->RowCount=10;
      StringGrid1->ColCount=10;
      FGrid.resize(StringGrid1->ColCount);
      for(unsigned int i=0; i<FGrid.size(); i++)
        FGrid[i].resize(StringGrid1->RowCount);
      for(unsigned int i=0; i<FGrid.size(); i++)
        for(unsigned int j=0; j<FGrid[i].size(); j++)
            FGrid[i][j]=false; //изначально все ячейки не покрашены
}

void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
      int ARow, bool &CanSelect)
{
    FGrid[ACol][ARow]=!FGrid[ACol][ARow];
}
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State)
{
    if(FGrid[ACol][ARow])
    {
        StringGrid1->Canvas->Brush->Color=clBlack;
        StringGrid1->Canvas->FillRect(Rect);
    }
}

Может быть в StringGrid1SelectCell надо ещё добавить вызов StringGrid1DrawCell.

Это сообщение отредактировал(а) Usper - 12.1.2010, 09:28


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
pafflique
Дата 12.1.2010, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

std::vector <std::vector <bool> > rects;

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    int n = StringGrid1->ColCount;
    int m = StringGrid1->RowCount;
    for (int j = 0; j < n; j++) {
        rects[j].resize(m);
    }


Вылетает по AccessViolation когда делаю ресайз...? Как быть?
PM MAIL   Вверх
smoke_man
Дата 12.1.2010, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Попробуй так:
Код

...................

    int n = StringGrid1->ColCount;
    int m = StringGrid1->RowCount;
    rects.resize(n);
    for (int j = 0; j < n; j++) 
        rects[j].resize(m); 
...................



--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
artsb
Дата 12.1.2010, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



ИМХО это всё извращение...

pafflique, опишите задачу подробнее. Может можно сделать всё проще.

Добавлено через 1 минуту и 3 секунды
Цитата(pafflique @  12.1.2010,  13:52 Найти цитируемый пост)
Вылетает по AccessViolation когда делаю ресайз...? Как быть? 

Вы не установили размерность первого вектора. smoke_man уже написал что делать.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
THandle
Дата 12.1.2010, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



PM   Вверх
pafflique
Дата 12.1.2010, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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

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

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


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

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


 




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


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

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