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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2008, 03:08   #1
zzzzz
Пользователь
 
Регистрация: 25.05.2007
Сообщений: 69
Восклицание Карта города

Подскажите пожалуйста, можно ли в image сделать ссылку на какое-то действие? Например нажав на какой-то дом на карте, в Edit выводился его номер.
И ещё один вопрос:
Как можно реализовать перетаскивание картинки? Image маленькое окошко, а сам рисунок карты большой, необходимо: чтоб при клике мышки и перетаскивании в стороны, карта изменялась.
Если у кого есть исходник карты города, выложите пожалуйста!
zzzzz вне форума Ответить с цитированием
Старый 17.08.2008, 08:53   #2
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Долго будешь делать ссылки на дома. Разбей карту на квадраты и каждому квадрату присвой свое значение.
Организовывается это так:
Допустим у тебя карта 1600*1600, вы заводите массив 160*160, значит размер клетки будет 10*10. Далее присваиваете каждому элементу или области массива значения которые буду определять личный индификатор местности. Далее в программе проверяете по клику в какую клетку попал указатель, [xmouse div 10,ymouse div 10] и например case'сом проверяете чему принадлежит этот индивидуальный указатель.
А с картинкой поступи просто, загрузи ее в image и свойство AutoSize у image поставь true.
Kostia вне форума Ответить с цитированием
Старый 17.08.2008, 14:18   #3
zzzzz
Пользователь
 
Регистрация: 25.05.2007
Сообщений: 69
По умолчанию

Карта большая, И в одном квадрате получиться несколько домов, а на очень маленькие квадраты разбивать тоже не удобно!!! Может у кого-то есть другие предложения??? А по поводу второго вопроса, так картинка карты больше чем возможно поместить на экране, поэтому необходимо чтоб картинка перетаскивалась! Если для этого удобнее использовать не Image, а другой компонент, то посоветуйте пожалуйста.
zzzzz вне форума Ответить с цитированием
Старый 17.08.2008, 14:45   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Как вариант, разбиваешь карту на куски определенного размера допустим 64х64 пикселя. и готовишь для каждого куска еще вспомогательную картинку-маску точно такого же размера. На этой картинке объекты закрашиваешь в определенные цвета. Допустим дом №15 - желтый, дом №25-красный. Как вариант можно рисовать хоть на DrawGrid. Делаешь ячейки размером 64х64 и рисуешь в них соответствующие куски карты. Потом допустим пользователь ткнул по какой-либо ячейке в пиксель с координатами [5;6]. Смотрим цвет соответствующего пикселя на вспомогательной картинке. Допустим пиксель красного цвета, значит мы ткнули по дому №25. Информацию о домах соответственно лучше вынести в какие-нибудь ini-файлы, в которых прописывать для каждого кусочка что у нас такое красное, а что желтое и т.д.
Рисовать вообще можно хоть прямо на форме, а кусочки по-умному подгружать в память, чтобы оперативку не загружать чрезмерно
pu4koff вне форума Ответить с цитированием
Старый 17.08.2008, 15:00   #5
zzzzz
Пользователь
 
Регистрация: 25.05.2007
Сообщений: 69
По умолчанию

но тогда как-же с перетаскиванием карты??? Ведь она будет разбита на кусочки!!!
zzzzz вне форума Ответить с цитированием
Старый 17.08.2008, 15:15   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

при перетаскивании меняете координаты левого верхнего кусочка и относительно него рисуете все остальные. соответственно полностью невидимые куски можно не рисовать и выгружать из памяти
pu4koff вне форума Ответить с цитированием
Старый 17.08.2008, 16:12   #7
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

как взять цвет под курсором с формы или image я покажу, если надо )))
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 17.08.2008, 16:25   #8
Ulagay700
Пользователь
 
Регистрация: 07.11.2007
Сообщений: 91
По умолчанию

Сделать матрицу, по координатам карты, каждой ячейке приписать нужную информацию. Далее - вычислять координаты курсора и соответственно выводить.
То бишь сделать собственную миниГИС.
Ulagay700 вне форума Ответить с цитированием
Старый 17.08.2008, 16:32   #9
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

zzzzz, сколько метров весит картинка?
В общем вариант, pu4koff, самый хороший. Разбиваешь карту на небольшие картинки и динамически подгружаешь, те которые попадают на экран, а те которые уходят за пределы уничтожаещь.
Раскрасить в разные цвета это хорошо, но я все же за матрицу.

Последний раз редактировалось Kostia; 17.08.2008 в 16:41.
Kostia вне форума Ответить с цитированием
Старый 17.08.2008, 21:26   #10
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Сообщение от Ulagay700 Посмотреть сообщение
Сделать матрицу, по координатам карты, каждой ячейке приписать нужную информацию. Далее - вычислять координаты курсора и соответственно выводить.
То бишь сделать собственную миниГИС.
Согласен. Принцип уложился в трех строках. А реализация это уже дело десятое. Уже несколько способов привели. Я за матрицу.

Здесь >>> можно почитать теорию о ГИС.

Компонент для отображения лучше взять TPaintBox. Для временного хранения в памяти кусков карты - TBitmap. Данные хранить в файле, на время выполнения подгружать в матрицу (сетку), чем меньше ячейка сетки - тем точнее будет сбор данных с карты при перемещении курсора. Самая кропотливая работа это заполнение данных, чтобы облегчить процесс лучше дополнительно программу редактор сделать, хоть часть рутины переложить на компьютер. Все остальное реализуется довольно легко. Помимо перетаскивания мышью можно еще масштабирование сделать.

В случае с вспомогательной картинкой для определения по цветам также много ручной работы - выбор за вами. Но в этом случае дальнейшая доработка (напр. добавить слои, т.е. не только адрес, но еще что-то определять) проблематична. Также обратную связь реализовать труднее, т.е. по адресу показать дом на карте.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 17.08.2008 в 21:30.
mutabor вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Карта города Vadimok Общие вопросы Delphi 4 26.08.2008 17:36
Звуковая карта SunKnight Win Api 3 23.12.2007 23:44
Карта области Dmitriy77 Общие вопросы Delphi 0 23.10.2007 18:46
Карта города 2 Archangel Помощь студентам 3 04.03.2007 05:19