Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сохранение канвы StringGrid через массив 
:(
    Опции темы
mr.Anderson
Дата 23.5.2009, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Суть. На форме есть TStringGrid. У него в OnDrawCell прорисовываются разными цветами клетки по клику мышки. Задача: сохранить где-то рисунок на канве, чтобы, к примеру, после сворачивания/разворачивания формы канва была восстановлена, т.е. рисунок не потерялся.

По совету я сделал это через булевый двумерный массив, в котором лежит true, если клетка закрашена, и false, если нет. Функция восстановления обходит массив и отрисовывает клетки нужными цветами в зависимости от значений элементов массива. Но! Последняя выделенная клетка по непонятным причинам ведет себя странно, то рисуется, то нет, причем хоть при изменении размеров формы, хоть (внимание) при наведении указателя мышки на TPageControl, на котором сидит StringGrid. Я приложил flash-ролик, на котором записаны эти непонятки.

Функция обновления канвы следующая (она срабатывает всегда на FormPaint):
Код

void __fastcall TFMain::ReloadBoardCanvas()
{
        for (int i=0; i<fVSize; i++)
        {
                for (int j=0; j<fHSize; j++)
                {
                        if (fBoardCanvas[i][j] == true)
                        {
                                SG->Canvas->Brush->Color = clSilver;
                        }
                        else
                        {
                            SG->Canvas->Brush->Color = clWhite;
                        }

                        //найдем координаты прямоугольника
                        int left = 0;
                        int top = 0;
                        for (int k=0; k<j; k++) //внутри строчки
                        {
                                left += SG->DefaultColWidth + SG->GridLineWidth;
                        }
                        for (int k=0; k<i; k++) //внутри колонки
                        {
                                top += SG->DefaultRowHeight + SG->GridLineWidth;
                        }

                        //перекрасим
                        SG->Canvas->FillRect(TRect(left, top, left+SG->DefaultColWidth, top+SG->DefaultRowHeight));
                }
        }
        SG->Repaint();
}]


Это сообщение отредактировал(а) mr.Anderson - 23.5.2009, 19:17

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  errors.rar 66,29 Kb


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
THandle
Дата 24.5.2009, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



mr.Anderson, вообще конечно надо как то по-другому делать, ибо все время оббегать массив это не дело... Может как то списком с удалением элементов сделать... Но у тебя времени нет... В аттаче пример(глючный, но рабочий. На Delphi правда).
Глянь.

Присоединённый файл ( Кол-во скачиваний: 15 )
Присоединённый файл  SGD.rar 4,70 Kb
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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