| 
| 
 | Вопрос # 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) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |