Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Морской бой


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

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

Впринципе, можно сделать чисто с канвой, но вопрос тогда аналогичный...

Автор: xvr 20.12.2009, 13:05
Цитата

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

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

Автор: Fanga 20.12.2009, 13:55
Проблема: при закраске более одной клетки за 1 раз, показывается закраска только одной клетки, как сделать так, чтобы были видны все закрашенные клетки? Если выделить мышкой все клетки таблицы отображаются все закрашенные клетки, но после новой прорисовки опять исчезают старые закрашивания.

Автор: xvr 20.12.2009, 14:08
Клетки красятся так, как вы их красите сами в OnDrawCell. Ищите ошибку там

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

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

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

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

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

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)