Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Морской бой 
:(
    Опции темы
Fanga
Дата 20.12.2009, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Надо сделать Морской бой с помощью DrawGrid
Все алгоритмы и структура ясна, проблема в незнании функций и методов DrawGrid
Вопрос такой:
в OnDrawCell я делаю закраску клетки, но для последующей закраски необходимо сделать обновление поля перерисовку, чтобы отображались новые изменения. Где это надо делать и с помощью какой команды осуществляется?

if ((ACol == x) && (ARow == y))
{
((TDrawGrid *) Sender) -> Canvas->Brush->Color=0;
((TDrawGrid *) Sender) -> Canvas->FillRect(Rect);
}

Впринципе, можно сделать чисто с канвой, но вопрос тогда аналогичный...
PM MAIL   Вверх
xvr
Дата 20.12.2009, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата

Где это надо делать
В OnDrawCell 
Цитата

с помощью какой команды осуществляется
Repaint в том месте, где надо поменять содержимое Grid'а

PM MAIL   Вверх
Fanga
Дата 20.12.2009, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Проблема: при закраске более одной клетки за 1 раз, показывается закраска только одной клетки, как сделать так, чтобы были видны все закрашенные клетки? Если выделить мышкой все клетки таблицы отображаются все закрашенные клетки, но после новой прорисовки опять исчезают старые закрашивания.
PM MAIL   Вверх
xvr
Дата 20.12.2009, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Клетки красятся так, как вы их красите сами в OnDrawCell. Ищите ошибку там

PM MAIL   Вверх
artsb
Дата 20.12.2009, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Fanga @  20.12.2009,  13:55 Найти цитируемый пост)
при закраске более одной клетки за 1 раз, показывается закраска только одной клетки

Закрашивать нужно только текущую клетку (ACol, ARow). Остальные толку закрашивать нет (можно, конечно, сделать). Если вы будете прорисовывать и другие клетки, то при следующем вызове OnDrawCell, они перерисуются.
OnDrawCell вызывается для каждой клетки отдельно!


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


Новичок



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

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



показывается закраска одной клетки, но закрашиваются несколько клеток все нормально
проблема в том, чтобы он сразу показывал все прокрашеные клетки, а не после обновленея экрана-_-
а следующая проблема в стирании старых закрасок
то есть я рисую 4-палубный кораблик(4 клетки) показывается одна, обвожу экран - показываются 4 клетки, потом рисую второй 4-палубник, старый стирается 

f ((ACol == x) && (ARow == y))
{
((TDrawGrid *) Sender) -> Canvas->Brush->Color=0;
((TDrawGrid *) Sender) -> Canvas->FillRect(Rect);
}

вот закраска конкретной клетки, если добавить условия в if то можно сразу несколько клеток закрасить
я уже писал...

Это сообщение отредактировал(а) Fanga - 20.12.2009, 18:18
PM MAIL   Вверх
xvr
Дата 20.12.2009, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



У вас неправильный подход - OnDrawCell должен красить заданную клетку (и только ее) В ЛЮБОМ СЛУЧАЕ. А вот в какой цвет красить и должно определяться параметрами ACol и ARow в OnDrawCell 

PM MAIL   Вверх
artsb
Дата 21.12.2009, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Fanga, у вас неправильно условие составлено. Как писал xvr, в данный момент нужно закрашивать ТОЛЬКО текущую клетку. Вам нужно правильно условия составить.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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