|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как сделать регион для TImage
Нужно что-то наподобие функции SetWindowRgn, но только не для окна приложения, я для компонента TImage. Дело в том, что необходимо обрезать тот самый компонент по прозрачности.
К примеру, на форме кнопка, сверху нее - картинка(TImage) 64 x 64, с загруженным рисунком 16 x 16, вот хотелось бы нажимать на кнопку, а не на рисунок.. Во вложении, зеленый - Shape, поверх - розовый рисунок. |
#2
|
||||
|
||||
Что-то не ясен смысл сего деяния. Зачем такие сложности? Просто разместить изображение на кнопке никак?
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
|||
|
|||
Задача поставлена только так и никак иначе.
У меня карта, для которой загружаются метки (города, объекты... итп) не хотел бы, чтобы хинт выводился для области, где ничего нет. А так получается, когда в TImage(32 x 32) помещаешь png рисунок 16x16, да еще и имеющий форму окружности. |
#4
|
|||
|
|||
Создать не квадратный компонент. Вот задача.
или сделать так, чтобы Image не воспринимал нажатие, а клик принимал объект(форма, к примеру) под рисунком(timage), но hint выводился. Последний раз редактировалось forum.sources.ru, 13.06.2013 в 05:09. |
#5
|
||||
|
||||
Не знаю, можно ли так сделать для TImage. У него нет хендла, он не окно, а просто указания для отрисовки родителю. А вот для любого окна можно так сделать. Например, создать простое окно без границы (просто белый прямоугольник), нарисовать на нем картинку и применить функции придания региона.
jmp $ ; Happy End! The Cake Is A Lie. |
#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. Не красиво это получается) особенно, если уменьшать масштаб.. |