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