|
Вопрос # 5 221/ вопрос решён / |
|
Здравствуйте, нужно рисунок или карту разделить на 12 секторов , и по клику на определённый сектор увеличивать всё что находится в секторе.
Сейчас метаюсь с методом реализации, в общем сделал на форме 2 image объекта, на одном разместил карту, с разрисовкой по конве на 12 секторов, второй скрыл . Снизу 12 кнопок с событиями на клик загрузки из отдельной папки уже увеличенного изображения сектора, и установкой видимости в тру.
как сделать лучше??? кто что посоветует???(ХЗ опыта не хватает как сделать именно чтобы не на кнопки тыкать, а на сами секторы на картинке, или же как реально увеличивать из исходного image...)
 |
Вопрос задал: winner13 (статус: 1-ый класс)
Вопрос отправлен: 22 апреля 2011, 16:13
Состояние вопроса: решён, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, winner13!
Сектор?
Но в принципе не важно. идея с двумя Image для Вас вполне нормальная. Расскажу, как бы я решал эту задачу.
для начала открыл в паинте (или любом другом любимо редакторе) карту и раскрасил ее цветами - каждый сектор в его персональный цвет. Какой именно цвет - не важно. Важно, что бы разные.
Теперь на форму ставим еще один Image (пусть это будет Image3), делаем его невидимым, загружаем туда эту "разукрашенную карту".
Для Image1, там где у нас основная карта, пишем такой код для события OnMouseUp или OnMouseDown
ShowMessage(inttostr(Image3.canvas.pixel[x,y]));
Теперь запускаем программу и кликаем по секторам, записываем числа для каждого сектора (в принципе, если подбирать цвета специально, то числа там будут ожидаемые).
Закрываем программу и снова открываем делфи. теперь процедуру нужно доделать
case Image3.canvas.pixel[x,y] of
число_1_сектора: Image2.picture.loadfromfile('sector1.jpg');
число_2_сектора: Image2.picture.loadfromfile('sector2.jpg');
....
else
ShowMessage('Для сектора '+inttostr(Image3.canvas.pixel[x,y])+' нет карты');
end;
Когда обкатаете технологию, можно сделать имена рисунков секторов такими, что бы они заключали в себе число и заметно упросить код выше
Image2.picture.loadfromfile('sector'+inttostr(Image3.canvas.pixel[x,y])+'.jpg');
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 22 апреля 2011, 16:28
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 6; последнее сообщение — 23 апреля 2011, 16:51; участников в обсуждении: 2.
|
winner13 (статус: 1-ый класс), 22 апреля 2011, 16:49 [#1]:
понять только не могу как он нужный квадрат определять будет X Y все таки же просто точку определяют...Если есть возможность набросать быстрый сорец , без премудростей и графики, хотя бы на 2 или 4 квадрата как это всё смотреться должно а там дальше я уже сам разберусь.
Не решимых проблем нет, есть неприятные для нас решения.
|
|
Вадим К (статус: Академик), 22 апреля 2011, 17:32 [#2]:
сорцы собственно все выше.
Код смотрит цвет точки на раскрашенной карте. и по ней определяет номер квадрата.
Вот к примеру, если бы Вы карту Британии разукрашивали, то она выглядела где то так 
Только все цвета должны быть разными и не принципиально какие именно.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
winner13 (статус: 1-ый класс), 23 апреля 2011, 14:46 [#3]:
всё понял, но попробовать не могу так как сразу же можно сказать что цвет будет перекрывать содержимое первого image, а это противоречит условиям задачи.
Есть идея говнокода, разместить прозрачными спрайтами или тайликами сектора и на событие он клик сделать второй имэйдж визибл тру с загруженым в нём по номеру или имени спрайта уже увеличенной картинкой, но уверен что я такое не потяну... Поэтому боюсь даже побывать...
Не решимых проблем нет, есть неприятные для нас решения.
|
|
Вадим К (статус: Академик), 23 апреля 2011, 15:09 [#4]:
Прочитайте очень внимательно то, что я написал в ответе. Никто ничего не будет перекрывать. Пользователь даже не будет знать, что есть третий, разкрашеный Image!
Ещё раз ключевой момент. Третий Image с загруженной расскрашенной картой - невидимый. Клики обрабатываются по первому Image, где собственно загружена основная карта, по координатам мышки подглядываем в невидимый Image, смотрим цвет пикселя по тем же координатам и узнаем, какую именно карту нужно подгрузить.
Таким образом делается то, что "водишь мышкой по карте, а всплывают подсказки названий городов".
Галочка "подтверждения прочтения" - вселенское зло.
|
|
winner13 (статус: 1-ый класс), 23 апреля 2011, 15:42 [#5]:
Мда ссори значит я совсем тупой ... Если бы готовый исходник бы посмотреть, я бы наверно сориентировался а так обрывками, не хватило оперативных мощностей мозга обработать и принять информацию +)
Не решимых проблем нет, есть неприятные для нас решения.
|
|
Вадим К (статус: Академик), 23 апреля 2011, 16:51 [#6]:
Там, выше есть все исходники. Просто сделайте последовательно то, что там написано.
Галочка "подтверждения прочтения" - вселенское зло.
|
15 июня 2011, 09:57: Статус вопроса изменён на решённый (изменил автор вопроса — winner13)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|