![]() |
|
Модераторы: Snowy, Alexeis, MetalFan |
![]()
|
|
| gonzales |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 241 Регистрация: 13.3.2006 Репутация: 1 Всего: 2 |
Приветствую, уважаемые форумчане!!!!
Возникла интересная задача, уже все мозги сломал. На форме есть несколько наследников от TImage с загруженной, частично прозрачной картинкой. Компоненты могут перекрывать друг друга. Неоходимо обработать клик по компоненту, если он попал в прозрачную область, передать его компоненту ниже и так далее. Сначала я хотел использовать регионы для обрезки прозрачной части компонента, но у TImage нет хэндла. Тогда я пробывал создать наследника TCustomControl, но он не поддерживает прозрачность. Все попытки прикрутить к нему прозрачность не увенчались успехом. Единственным вариантом вижу обрабатывать onclick и передавать его в случае "тыкания" в прозрачную область компоненту под ним. Отсюда пара вопросов, кроме как перебирать все компоненты на форме и сравнивать clientrect с позицией мышки если ли другие идеи? Например использовать подобные функции function FindDragTarget(const Pos: TPoint; AllowDisabled: Boolean): TControl; function ControlAtPos(const Pos: TPoint; AllowDisabled: Boolean; AllowWinControls: Boolean = False; AllLevels: Boolean = False): TControl; но вопрос, как найти все контролы под мышкой?? --------------------
- мастер, мастер, запорол..., все четыре запорол!!!- я ж тебе только три давал!!!???- да я и образец запорол!!!! |
|||
|
||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
Допустим что на форме лежит N компонентов TImage и у них у всех загрежены полупрозначные TPngImage. У каждого компонента на OnMouseDown установлен следующий обработчик:
В Caption пишется имя найденного компонента. Число 10 - это значит что при прозрачности менее 10 изображение считается непрозрачной. Можно заменить на другу константу на вкус. Главное чтобы азображение не масштабировалось в TImage иначе это надо учитывать в алоритме. В строчке "Caption := IM.Name;" можно сделать "IM.OnClick(IM);" что вызовет клик по непрозначному Image. -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| gonzales |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 241 Регистрация: 13.3.2006 Репутация: 1 Всего: 2 |
спасибо за ответ. я делаю примерно тоже самое, но столкнулся еще с одной проблемой. Мне необходимо таскать компоненты за видимую область по форме. Так вот, при перетаскивании происходит следующее: отрабатывается событие onmousedown, если мы попали в прозрачную область верхнего контрола, под которым лежит непрозрачная область контрола, который я хочу перетащить, то перемещения не происходит, пока я не выйду за физические границы верхнего контрола.
Пробую сделать следующим образом:
ReleaseCapture не помогает --------------------
- мастер, мастер, запорол..., все четыре запорол!!!- я ж тебе только три давал!!!???- да я и образец запорол!!!! |
|||
|
||||
| Illusion Dolphin |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
Дополняем предыдущий код:
и у формы не забываем DoubleBuffered = True -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
||||
|
|||||
![]()
|
| Правила форума "Delphi: Звук, графика и видео" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |