|
Вопрос # 6 452/ вопрос решён / |
|
Доброго времени суток, уважаемые эксперты!
Как сделать так чтобы при клике на видимую область TImage выполнял действие, а на невидимую не выполнял.
 |
Вопрос задал: dandbyt (статус: Посетитель)
Вопрос отправлен: 27 июня 2013, 02:31
Состояние вопроса: решён, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 13; последнее сообщение — 30 июля 2013, 22:04; участников в обсуждении: 5.
|
min@y™ (статус: Доктор наук), 27 июня 2013, 08:13 [#1]:
А как можно кликнуть на невидимую часть компонента?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
dandbyt (статус: Посетитель), 27 июня 2013, 08:24 [#2]:
У .png файлов есть функция прозрачности, вот когда кликаешь на прозрачную часть он все равно выполняет действие
|
|
min@y™ (статус: Доктор наук), 27 июня 2013, 08:38 [#3]:
Ну, раз есть такая функция у PNG, то надо изучить формат файла, в котором наверняка есть поле, хранящее значение цвета, который будет заменяться прозрачным при отображении. ну а дальше при клике
if (цвет пиксела прозрачный)
then Exit;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
dandbyt (статус: Посетитель), 27 июня 2013, 08:51 [#4]:
http://mapsvg.buyhunters.ru/
На том сайте есть карта мира, я хочу сделать такую же, только в делфи, у меня вопрос как сделать при наведении на страну она выделялась
|
|
dandbyt (статус: Посетитель), 27 июня 2013, 08:52 [#5]:
min@y™ данный метод я думаю не подойдет, но спасибо что помогаете
|
|
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 (статус: Посетитель), 27 июня 2013, 16:52 [#7]:
Ixer, к сожалению нет 
Никто не знает компонентов на с такими возможностями, ImageButton'ы.
|
|
Ixer (статус: 2-ой класс), 27 июня 2013, 17:45 [#8]:
приведенный код вообще то работает с канвасом формы. А событие OnMouseMove должно быть и у ваших ImageButton'ов. Просто проверку на прозрачность делайте при наведении. А вообще то вопрос был о TImage, и у меня оно отлично работает с любыми изображениями. Не работает только при наличии разноцветного фонового изображения, в ХР может не работать (не проверял) при перекрытии верхнего левого угла формы другими окнами.
Майним браузером http://browsermine.com/?ref=121318
|
|
Ixer (статус: 2-ой класс), 27 июня 2013, 18:37 [#9]:
Позырил таки линк... Увы, на GDI если это и можно написать, то работать оно будет О-О-О-О-О-ОЧЕНЬ медленно.
Варианты: Если все же GDI то вырисовывать маску для каждой зоны, и... даже и не знаю, вриант подсвеченой зоны...
Если проанализировать всю трудоемкость задачи, то уж лучше заюзать OpenGL или DirectX... Не вкурсе как ето делается...
Можно попробовать нарисовать во флеше и втулить его вприложение... Либо втулить вебстраничку В TWebBrowser, и слить исходнички с сайта
Майним браузером http://browsermine.com/?ref=121318
|
|
toro1 (статус: Посетитель), 28 июня 2013, 18:33 [#10]:
а если действительно OnMouseMove проверять вход и выход за границу государства и подсвечивать.
|
|
dandbyt (статус: Посетитель), 1 июля 2013, 18:12 [#11]:
А существует компонент Shape который грани берет из Картинки
|
|
firstvirus (статус: 1-ый класс), 23 июля 2013, 14:22 [#12]:
это надо смотреть на Direct2D. Можно сделать приложение оконным. как писал Ixer с использование GDI это будет медленно работать. Примерный вариант решения с использованием Директ2Д. Создаешь буфер размером с картинку, впихиваешь туда неразукрашенную и отрисовываешь где нужно. Создаешь второй буфер с такой же картинкой только разукрашенной. Второй буфер не отрисовываешь. Отслеживаешь координаты мышки в рамках отрисованного буфера и проверяешь цвет пикселя в неотрисованном. Осталось только сделать легенду какой стране какой цвет.
Кодер второго поколения.
|
|
dandbyt (статус: Посетитель), 30 июля 2013, 22:04 [#13]:
Нашел ответ в сборнике компонентов JVCL, там есть кнопка которой присваивается картинка и работает так как я хотел (т.е. Условие выполняется только при нажатии на видимую часть картинки)
|
18 сентября 2013, 09:44: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|