![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Нужно что-то наподобие функции SetWindowRgn, но только не для окна приложения, я для компонента TImage. Дело в том, что необходимо обрезать тот самый компонент по прозрачности. 
		
	
		
		
			К примеру, на форме кнопка, сверху нее - картинка(TImage) 64 x 64, с загруженным рисунком 16 x 16, вот хотелось бы нажимать на кнопку, а не на рисунок.. Во вложении, зеленый - Shape, поверх - розовый рисунок.  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Что-то не ясен смысл сего деяния. Зачем такие сложности? Просто разместить изображение на кнопке никак? 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Задача поставлена только так и никак иначе. 
		
	
		
		
		
		
		
	
		
		
	
	
	У меня карта, для которой загружаются метки (города, объекты... итп) не хотел бы, чтобы хинт выводился для области, где ничего нет. А так получается, когда в TImage(32 x 32) помещаешь png рисунок 16x16, да еще и имеющий форму окружности.  | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Создать не квадратный компонент. Вот задача. 
		
	
		
		
		
		
		
		
			или сделать так, чтобы Image не воспринимал нажатие, а клик принимал объект(форма, к примеру) под рисунком(timage), но hint выводился. Последний раз редактировалось forum.sources.ru, 13.06.2013 в 05:09.  | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Не знаю, можно ли так сделать для TImage. У него нет хендла, он не окно, а просто указания для отрисовки родителю. А вот для любого окна можно так сделать. Например, создать простое окно без границы (просто белый прямоугольник), нарисовать на нем картинку и применить функции придания региона. 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Думаю, что можно. Когда-то видел компонент-кнопку в который помещалась картинка, причем любой формы, и кнопка имела вид этой картинки. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 так и функция в интернете уже давно гуляет, которая создает регион форме по картинке на ней (удаляются прозрачные участки). но ведь TImage не окно, как уже сказано, его вообще как бы нет для системы. 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#8  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Спасибо за разъяснение, конечно. Но это и так понятно.. Ничего не возможного не бывает, нужно найти подход. С хендлом, не получится. Какие еще варианты? 
		
	
		
		
		
		
		
	
		
		
	
	
	Для себя думал так: создать глобальную переменную типа Color. В которую, по событию OnMouseMove - заносить информацию о цвете пикселя TImage и там же включать/отключать Hint. А в обработчике OnMouseDown TImage'a относить нажатие на объект ниже, если цвет "не цвет" (clNone). А вот почему не хочется так делать: Код: 
	repeat 1. Это гумос; until Это <> гумос;  | 
| 
		 
			 
			#9  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
  | 
| 
		 
			 
			#10  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 К сожалению мне это не подходит(( уже думал на canvas переходить, но тоже не то..  | 
| 
		 
			 
			#11  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 А может есть готовые компоненты такого плана, кто в курсе? 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#12  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Про готовые решения ничего не скажу но если привязать к каждой кнопке по региону  а  в Button_MouseMove 
		
	
		
		
		
		
		
	
		
		
	
	
	смотреть PtInRegion(RGN: HRGN; X, Y: Integer): BOOL; и менять .Enabled : то при Enabled = false -> клик отработает на нижнем контроле (по MouseLeave вернуть исходное состояние) а про .ShowHint и так все ясно  | 
| 
		 
			 
			#13  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Для такой задачи не стыдно и свой компонент написать. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#14  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Как обычно все упирается во время.. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#15  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Кажется, я не правильно объяснился.. хотел упростить восприятие задачи, получилось видимо не очень)) 
		
	
		
		
			Во вложении рисунок. Курсор меняет вид проходя над TImage. Границу TImage можно выявить по курсору мыши. Объектов очень много и все разного размера и формы (на картинке оставил один объект). Как здесь видно- курсор уже поменял свой вид и появился простой hint дойдя до границы TImage. Не красиво это получается) особенно, если уменьшать масштаб..  |