Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 221

/ вопрос решён /

Здравствуйте, нужно рисунок или карту разделить на 12 секторов , и по клику на определённый сектор увеличивать всё что находится в секторе.

Сейчас метаюсь с методом реализации, в общем сделал на форме 2 image объекта, на одном разместил карту, с разрисовкой по конве на 12 секторов, второй скрыл . Снизу 12 кнопок с событиями на клик загрузки из отдельной папки уже увеличенного изображения сектора, и установкой видимости в тру.

как сделать лучше??? кто что посоветует???(ХЗ опыта не хватает как сделать именно чтобы не на кнопки тыкать, а на сами секторы на картинке, или же как реально увеличивать из исходного image...)

winner13 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: 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

winner13 (статус: 1-ый класс), 22 апреля 2011, 16:49 [#1]:

понять только не могу как он нужный квадрат определять будет X Y все таки же просто точку определяют...Если есть возможность набросать быстрый сорец , без премудростей и графики, хотя бы на 2 или 4 квадрата как это всё смотреться должно а там дальше я уже сам разберусь.
Не решимых проблем нет, есть неприятные для нас решения.
Вадим К

Вадим К (статус: Академик), 22 апреля 2011, 17:32 [#2]:

сорцы собственно все выше.
Код смотрит цвет точки на раскрашенной карте. и по ней определяет номер квадрата.
Вот к примеру, если бы Вы карту Британии разукрашивали, то она выглядела где то так
Только все цвета должны быть разными и не принципиально какие именно.
Галочка "подтверждения прочтения" - вселенское зло.
winner13

winner13 (статус: 1-ый класс), 23 апреля 2011, 14:46 [#3]:

всё понял, но попробовать не могу так как сразу же можно сказать что цвет будет перекрывать содержимое первого image, а это противоречит условиям задачи.

Есть идея говнокода, разместить прозрачными спрайтами или тайликами сектора и на событие он клик сделать второй имэйдж визибл тру с загруженым в нём по номеру или имени спрайта уже увеличенной картинкой, но уверен что я такое не потяну... Поэтому боюсь даже побывать...
Не решимых проблем нет, есть неприятные для нас решения.
Вадим К

Вадим К (статус: Академик), 23 апреля 2011, 15:09 [#4]:

Прочитайте очень внимательно то, что я написал в ответе. Никто ничего не будет перекрывать. Пользователь даже не будет знать, что есть третий, разкрашеный Image!
Ещё раз ключевой момент. Третий Image с загруженной расскрашенной картой - невидимый. Клики обрабатываются по первому Image, где собственно загружена основная карта, по координатам мышки подглядываем в невидимый Image, смотрим цвет пикселя по тем же координатам и узнаем, какую именно карту нужно подгрузить.
Таким образом делается то, что "водишь мышкой по карте, а всплывают подсказки названий городов".
Галочка "подтверждения прочтения" - вселенское зло.
winner13

winner13 (статус: 1-ый класс), 23 апреля 2011, 15:42 [#5]:

Мда ссори значит я совсем тупой ... Если бы готовый исходник бы посмотреть, я бы наверно сориентировался а так обрывками, не хватило оперативных мощностей мозга обработать и принять информацию +)
Не решимых проблем нет, есть неприятные для нас решения.
Вадим К

Вадим К (статус: Академик), 23 апреля 2011, 16:51 [#6]:

Там, выше есть все исходники. Просто сделайте последовательно то, что там написано.
Галочка "подтверждения прочтения" - вселенское зло.

15 июня 2011, 09:57: Статус вопроса изменён на решённый (изменил автор вопроса — winner13)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:56
Выполнено за 0.03 сек.