Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2012, 16:16   #1
Китос
Пользователь
 
Регистрация: 24.09.2011
Сообщений: 26
Сообщение Компонента для лабиринта

Всех с наступившим!
У меня такая проблема.
Хочу замутить лабиринт, но мучаюсь с выбором визуальной компоненты.
Лабиринт представляет собой двумерный массив клеток, открытых и закрытых. Я хочу чтобы каждая клетка имела свою картинку (в зависимости от того закрыта она или открыта). Вроде как неплохо подходит DrawGrid. Но как хранить данные о том закрыта ячейка или нет? Я думал надо наследовать DrawGrid, и добавить в качестве поля двумерный массив boolean. Но увы не знаю как сделать так, чтобы этот массив соответствовал и менял свой размер согласно кол-ву ячеек. Помоги с наследованием или предложите более рациональный подход)
Заранее спасибо.
Китос вне форума Ответить с цитированием
Старый 02.01.2012, 17:01   #2
LiuLiuJons
Форумчанин
 
Регистрация: 28.12.2011
Сообщений: 124
По умолчанию

И тебя также с Наступившим!

А в чём проблема? Создай динамический массив и в начале присвой ему размер этой таблицы.

Пример создания этих всех клеток:

opened: array of array of boolean;// такой синтаксис делфи?
columns:=10;
rows:=15;

DrawGrid1.colCount:=columns;
DrawGrid1.rowCount:=rows;

Setlength(opened, DrawGrid1.colCount, DrawGrid1.rowCount);

Хотя может ты что-то другое имел ввиду.
"Думай не о задаче, а о решении" (с)
LiuLiuJons вне форума Ответить с цитированием
Старый 02.01.2012, 18:17   #3
Китос
Пользователь
 
Регистрация: 24.09.2011
Сообщений: 26
По умолчанию

в принципе все верно, но если я добавлю пару столбцов, то мне как то придется и массив изменять (ручками), а я хотел именно класс наследовать. Чтобы к моей drawgrid припилить что-то вроде cells от stringgrid. Чтоб я мог делать что-то вроде
Код:
Labirint.Cells[i,j]:=true;
и в зависимости от значений в этом массиве перерисовывать таблицу. (не знаю на сколько ясно я объясняю)
Китос вне форума Ответить с цитированием
Старый 02.01.2012, 18:40   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Если из интереса, то можно и своего наследника от StringGrid сделать, добавив в него соответствующий массив и переопределив ряд методов. Если потом новый компонент не использовать в других местах, то по трудозатратам выйдет больше, чем параллельное ведение этого массива. Все равно код изменяющий массив и в новом компоненте делать нужно, плюс решать проблемы переопределения методов и далеко не всегда это просто и очевидно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.01.2012, 18:55   #5
Китос
Пользователь
 
Регистрация: 24.09.2011
Сообщений: 26
По умолчанию

да я понял что придется посидеть)
но как хотя-бы посмотреть исходник класса drawgrid?
Китос вне форума Ответить с цитированием
Старый 02.01.2012, 19:02   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Исходники для TStringGrid, TDrawGrid, TCustomDrawGrid, TCustomGrid все в юните Grids
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компонента для 1с v7 Studik Win Api 1 26.04.2011 17:39
Алгоритм прохождения лабиринта PAVEL315 Общие вопросы Delphi 13 02.01.2010 01:22
Выход из лабиринта karamelka87 Общие вопросы C/C++ 9 27.01.2009 23:49
Генерирование рандомного лабиринта Djaconda Паскаль, Turbo Pascal, PascalABC.NET 12 12.11.2007 19:00