Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

куда щелкнул юзверь?

Доброрго всем!
есть Image в него загружена картинка с цветными облястями и черными
границами, в качестве примера:

image1.Canvas.Brush.Color:=clRed;
image1.Canvas.Ellipse(rect(10,10,50,50));
image1.Canvas.Brush.Color:=clGreen;
image1.Canvas.Rectangle(rect(10,70,50,110));

надо узнать щелкнул ли юзверь по элипсу или квадрату, к цвету привязку
делать не стоит т.к. он может меняется.
Реально области намного сложнее.

Заранее всем спасибо

prog_alex76 mailto:prog_alex***@m*****.ru

Номер выпуска : 3793
Возраст листа : 423 (дней)
Количество подписчиков : 502
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/266983
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.prog.prog
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru?subject=comp.soft.prog.prog

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   Thu, 18 Nov 2004 11:33:29 +0900 (#266983)

 

Ответы:

К сожалению, ничего конкретного по самой реализации сказать не могу.
Единственное что могу посоветовать: найти книги по машинной графике с
алгоритмами построения прямых и дуг - то есть, расчет координат точек этих
фигур (давным-давно сам держал в руках подобную книгу, но автора с названием
не помню). Тогда само определение, в какой фигуре щелкнули, можно
реализовать так:
1. Запомнить цвет точки, где щелкнули.
2. Выбрать некоторое напровление (скажем, горизонтальное).
3. "Дойти" вдоль этого направления до черной границы - т.е., изменять
абсциссу точки из п.1 пока в ней не будет черного цвета. (точка А)
4. В небольшой окрестности точки щелчка выбрать еще одну точку с тем же
цветом и пойти от нее в том же направлении. (получить точку Б)
5. По алгоритму построения "машинной" прямой проверить цвета на прямой АБ,
то есть, сам алгоритм выдает координаты точек прямой, а мы смотрим на цвет в
этих точках - черный ли он.
Точно так же можно проверить, ограничена ли область щелчка дугой эллипса.
А вообще, это все распознавание образов, если говорить обобщенно. И этой
отрасли программрования посвященны целые учебники. Потому, честно говоря, не
могу утверждать, что мое предложение сработает при сложной конфигурации
объектов.
--
Вадим Шешунов

МЫ ПЛАТИМ за Ваш телефон... пока Вы в Интернет.
http://zeos.net - лучшее отношение цена/качество для интернет с callback
в городе Киеве.

Номер выпуска : 3799
Возраст листа : 425 (дней)
Количество подписчиков : 503
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/267721
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.prog.prog
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru?subject=comp.soft.prog.prog

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   Вадим Шешунов Fri, 19 Nov 2004 13:43:47 +0200 (#267721)

 

Glad to greet, prog_alex76!

You seem to have written (Thursday, November 18, 2004):

Поясни задачу. Если речь о действительно сложных регионах, то без
цвета не обойтись. То есть необязательно речь о выводимом цвете
фигуры, а о некой области в back-buffer, которая заливается при
выводе фигуры. И такое действительно часто используется при всяческих
наворотах с нестандартным графическим интерфейсом.
Тем более, если ты захочешь, чтобы они могли пересекаться, то вряд ли
найдёшь точное аналитическое решение при попытках определения
контура, а про время нахождения решения я вообще молчу.
А ещё были API ф-ии для работы с регионами (SetWindowRgn), но не знаю поможет
ли
тебе.

Alles Gute!

...In Code We Trust...

Ответить   Sat, 20 Nov 2004 21:13:04 +0300 (#267876)

 

Суть дела: надо нарисовать географическую карту, в ней есть районы
(понятно что граница сложная).

есть картинка этого района (Bitmap),
с векторами связываться не хочу (а может и зря)

на сегодняшний момент: разбил карту на отдельные картинки по районам,
т.е. 20 районов - 20 картинок, нашел код который из ч/б картинки
делает регион, записываю этот регион в файл (1.dat..20.dat),
при работе с регионами отпадает проблема идентификации района, заливка
этого района, т.е. надо просто вывести эти регионы в нужном месте,
но возникает проблема (может это и не проблема): район рисуется в том
месте и с теми размерами с которыми он был записан в файл.

надо: нарисовать район в определенных координатах и с масштабированием.

есть ф-ция: GetRgnBox, которая возвращает Rect региона, думал ф-ция
SetRectRgn нарисует район в указанном Rect, но она заливает этот
прямоугольник цветом.
может быть есть ф-ция типа SetRgnBox или какая-нибудь программная
реализация подобной функции?

Номер выпуска : 3812
Возраст листа : 427 (дней)
Количество подписчиков : 507
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/268730
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.prog.prog
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru?subject=comp.soft.prog.prog

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   Mon, 22 Nov 2004 11:51:06 +0900 (#268730)

 

Здравствуйте, prog_alex76.

В письме mid:20041122211901.2687***@c*****.subscribe
Вы писали 22 ноября 2004 г. в 4:51:06 [GMT +2:00]:

Эээ... батенька. Это у тебя ГИС задача ! :))
Следовательно, тебе надо копать ГИС, а это именно вектора.
Я сам подымал похожие темы здесь где-то в январе или в феврале месяце
этого года. Поищи в архивах рассылки. Мне там давали чудесные урлики
на сайты по ГИСу, с которых я скачивал компоненты для Делфи и
С++Билдера для работы с ГИС. Среди этих компонентов как раз были
похожие твои функции по выделению, масштабированию регионов (слоев на
карте).
Попробуй поискать с www.gisinfo.ru
Еще есть статьи на сайте "Королевство Delphi" посвященные ГИС и как с
ним работать. Кажется тут :
http://delphi.vitpc.com/mastering/mapx.htm
http://delphi.vitpc.com/mastering/mapinfo.htm
http://delphi.vitpc.com/mastering/poligon/ngis.htm
http://delphi.vitpc.com/mastering/poligon/datamap.htm
http://geoblock.sourceforge.net/
http://www.vkasoft.narod.ru
http://delphi.softclub.net/read/chmvdelfaq/baikonurgistoolkit.htm

Желаю удачи.

Ответить   Feniks Tue, 23 Nov 2004 12:38:26 +0200 (#269050)

 

Здравствуйте, Denis.

Вы писали 21 ноября 2004 г., 0:13:04:


А если создать Объект? Один обший, и наследники для разных фигур с
обработкой onClick?

Ответить   Sat, 27 Nov 2004 01:59:09 +0600 (#271009)

 

Hello prog_alex76,

Thursday, November 18, 2004, 6:33:29 AM, you wrote:

Есть два варианта(на самом деле больше, но другие что я знаю более
извращенные :) ):
а) Фигуры можно функционально описать т.е. задать их контур,
если это сделать то проблеммы собственно больше нет, нужно фигуру разбить
на выпуклые области
а затем проверять попадание мышки в каждую из них(в инете полно
разных описаний алгоритмов как это делается). Например с помощью виндовских
регионов.
б) Если не жалко памяти, то для каждой фигуры можно создать
отдельный буфер с размерами описывающего ее(фигуру) прямоугольника,
нарисовать в этот буфер фигуру(т.е например где есть фигура ставим
1 где нет ставим 0) и при попадании мышки в описывающий
прямоугольник проверять по буферу естли в данной точке 1 то мы
попали в фигуру если 0 то соответсвенно нет. Это работает намного быстрее
чем вариант (а).

Ответить   Sat, 20 Nov 2004 22:59:00 +0400 (#267909)