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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 6 452

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

Доброго времени суток, уважаемые эксперты!
Как сделать так чтобы при клике на видимую область TImage выполнял действие, а на невидимую не выполнял.

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

Вопрос задал: dandbyt (статус: Посетитель)
Вопрос отправлен: 27 июня 2013, 02:31
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 13; последнее сообщение — 30 июля 2013, 22:04; участников в обсуждении: 5.
min@y™

min@y™ (статус: Доктор наук), 27 июня 2013, 08:13 [#1]:

А как можно кликнуть на невидимую часть компонента?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
dandbyt

dandbyt (статус: Посетитель), 27 июня 2013, 08:24 [#2]:

У .png файлов есть функция прозрачности, вот когда кликаешь на прозрачную часть он все равно выполняет действие
min@y™

min@y™ (статус: Доктор наук), 27 июня 2013, 08:38 [#3]:

Ну, раз есть такая функция у PNG, то надо изучить формат файла, в котором наверняка есть поле, хранящее значение цвета, который будет заменяться прозрачным при отображении. ну а дальше при клике
if (цвет пиксела прозрачный) 
  then Exit;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
dandbyt

dandbyt (статус: Посетитель), 27 июня 2013, 08:51 [#4]:

http://mapsvg.buyhunters.ru/
На том сайте есть карта мира, я хочу сделать такую же, только в делфи, у меня вопрос как сделать при наведении на страну она выделялась
dandbyt

dandbyt (статус: Посетитель), 27 июня 2013, 08:52 [#5]:

min@y™ данный метод я думаю не подойдет, но спасибо что помогаете :)
Ixer

Ixer (статус: 2-ой класс), 27 июня 2013, 12:43 [#6]:

dandbyt: А если так:
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  Var fc,cc:TColor;
begin
 fc:=Form1.Canvas.Pixels[1,1];
 cc:= Form1.Canvas.Pixels[x+image1.Left,y+image1.Top];
 if cc=fc then
  Caption:='Transparent'
else
  Caption:='No transparent';
end;
Майним браузером http://browsermine.com/?ref=121318
dandbyt

dandbyt (статус: Посетитель), 27 июня 2013, 16:52 [#7]:

Ixer, к сожалению нет :(

Никто не знает компонентов на с такими возможностями, ImageButton'ы.
Ixer

Ixer (статус: 2-ой класс), 27 июня 2013, 17:45 [#8]:

приведенный код вообще то работает с канвасом формы. А событие OnMouseMove должно быть и у ваших ImageButton'ов. Просто проверку на прозрачность делайте при наведении. А вообще то вопрос был о TImage, и у меня оно отлично работает с любыми изображениями. Не работает только при наличии разноцветного фонового изображения, в ХР может не работать (не проверял) при перекрытии верхнего левого угла формы другими окнами.
Майним браузером http://browsermine.com/?ref=121318
Ixer

Ixer (статус: 2-ой класс), 27 июня 2013, 18:37 [#9]:

Позырил таки линк... Увы, на GDI если это и можно написать, то работать оно будет О-О-О-О-О-ОЧЕНЬ медленно.

Варианты: Если все же GDI то вырисовывать маску для каждой зоны, и... даже и не знаю, вриант подсвеченой зоны...
Если проанализировать всю трудоемкость задачи, то уж лучше заюзать OpenGL или DirectX... Не вкурсе как ето делается...

Можно попробовать нарисовать во флеше и втулить его вприложение... Либо втулить вебстраничку В TWebBrowser, и слить исходнички с сайта :)
Майним браузером http://browsermine.com/?ref=121318
toro1

toro1 (статус: Посетитель), 28 июня 2013, 18:33 [#10]:

а если действительно OnMouseMove проверять вход и выход за границу государства и подсвечивать.
dandbyt

dandbyt (статус: Посетитель), 1 июля 2013, 18:12 [#11]:

А существует компонент Shape который грани берет из Картинки
firstvirus

firstvirus (статус: 1-ый класс), 23 июля 2013, 14:22 [#12]:

это надо смотреть на Direct2D. Можно сделать приложение оконным. как писал Ixer с использование GDI это будет медленно работать. Примерный вариант решения с использованием Директ2Д. Создаешь буфер размером с картинку, впихиваешь туда неразукрашенную и отрисовываешь где нужно. Создаешь второй буфер с такой же картинкой только разукрашенной. Второй буфер не отрисовываешь. Отслеживаешь координаты мышки в рамках отрисованного буфера и проверяешь цвет пикселя в неотрисованном. Осталось только сделать легенду какой стране какой цвет.
Кодер второго поколения.
dandbyt

dandbyt (статус: Посетитель), 30 июля 2013, 22:04 [#13]:

Нашел ответ в сборнике компонентов JVCL, там есть кнопка которой присваивается картинка и работает так как я хотел (т.е. Условие выполняется только при нажатии на видимую часть картинки)

18 сентября 2013, 09:44: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.)

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

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