|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
17.08.2008, 03:08 | #1 |
Пользователь
Регистрация: 25.05.2007
Сообщений: 69
|
Карта города
Подскажите пожалуйста, можно ли в image сделать ссылку на какое-то действие? Например нажав на какой-то дом на карте, в Edit выводился его номер.
И ещё один вопрос: Как можно реализовать перетаскивание картинки? Image маленькое окошко, а сам рисунок карты большой, необходимо: чтоб при клике мышки и перетаскивании в стороны, карта изменялась. Если у кого есть исходник карты города, выложите пожалуйста! |
17.08.2008, 08:53 | #2 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Долго будешь делать ссылки на дома. Разбей карту на квадраты и каждому квадрату присвой свое значение.
Организовывается это так: Допустим у тебя карта 1600*1600, вы заводите массив 160*160, значит размер клетки будет 10*10. Далее присваиваете каждому элементу или области массива значения которые буду определять личный индификатор местности. Далее в программе проверяете по клику в какую клетку попал указатель, [xmouse div 10,ymouse div 10] и например case'сом проверяете чему принадлежит этот индивидуальный указатель. А с картинкой поступи просто, загрузи ее в image и свойство AutoSize у image поставь true. |
17.08.2008, 14:18 | #3 |
Пользователь
Регистрация: 25.05.2007
Сообщений: 69
|
Карта большая, И в одном квадрате получиться несколько домов, а на очень маленькие квадраты разбивать тоже не удобно!!! Может у кого-то есть другие предложения??? А по поводу второго вопроса, так картинка карты больше чем возможно поместить на экране, поэтому необходимо чтоб картинка перетаскивалась! Если для этого удобнее использовать не Image, а другой компонент, то посоветуйте пожалуйста.
|
17.08.2008, 14:45 | #4 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Как вариант, разбиваешь карту на куски определенного размера допустим 64х64 пикселя. и готовишь для каждого куска еще вспомогательную картинку-маску точно такого же размера. На этой картинке объекты закрашиваешь в определенные цвета. Допустим дом №15 - желтый, дом №25-красный. Как вариант можно рисовать хоть на DrawGrid. Делаешь ячейки размером 64х64 и рисуешь в них соответствующие куски карты. Потом допустим пользователь ткнул по какой-либо ячейке в пиксель с координатами [5;6]. Смотрим цвет соответствующего пикселя на вспомогательной картинке. Допустим пиксель красного цвета, значит мы ткнули по дому №25. Информацию о домах соответственно лучше вынести в какие-нибудь ini-файлы, в которых прописывать для каждого кусочка что у нас такое красное, а что желтое и т.д.
Рисовать вообще можно хоть прямо на форме, а кусочки по-умному подгружать в память, чтобы оперативку не загружать чрезмерно |
17.08.2008, 15:00 | #5 |
Пользователь
Регистрация: 25.05.2007
Сообщений: 69
|
но тогда как-же с перетаскиванием карты??? Ведь она будет разбита на кусочки!!!
|
17.08.2008, 15:15 | #6 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
при перетаскивании меняете координаты левого верхнего кусочка и относительно него рисуете все остальные. соответственно полностью невидимые куски можно не рисовать и выгружать из памяти
|
17.08.2008, 16:12 | #7 |
Форумчанин
Регистрация: 01.02.2007
Сообщений: 785
|
как взять цвет под курсором с формы или image я покажу, если надо )))
Изо всей благодати
В руках крепко сжатых Я донесу только капли |
17.08.2008, 16:25 | #8 |
Пользователь
Регистрация: 07.11.2007
Сообщений: 91
|
Сделать матрицу, по координатам карты, каждой ячейке приписать нужную информацию. Далее - вычислять координаты курсора и соответственно выводить.
То бишь сделать собственную миниГИС. |
17.08.2008, 16:32 | #9 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
zzzzz, сколько метров весит картинка?
В общем вариант, pu4koff, самый хороший. Разбиваешь карту на небольшие картинки и динамически подгружаешь, те которые попадают на экран, а те которые уходят за пределы уничтожаещь. Раскрасить в разные цвета это хорошо, но я все же за матрицу. Последний раз редактировалось Kostia; 17.08.2008 в 16:41. |
17.08.2008, 21:26 | #10 | |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Цитата:
Здесь >>> можно почитать теорию о ГИС. Компонент для отображения лучше взять 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. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Карта города | 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 |