![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Messages |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 26.3.2004 Репутация: нет Всего: нет |
Вобщем проблемка. Нарисовала я себе красивые часики... прозрачные... по верх всех окон. Но хочецца, чтобы они не мешали нажимать на компоненты под ними. Как это сделать, подскажите, плиз? Вдруг это просто и я все пойму.
![]() |
|||
|
||||
Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 14 Всего: 78 |
Над рабочей программой висит полупрозрачная форма с часиками. И нужно, чтобы часики эти были "полностью прозрачными", т.е. даже клики мышкой проходили сквозь неё.
У меня по этому поводу есть только одно предложение: Сделать следующий обработчик:
-------------------- Ll 2 |
|||
|
||||
Messages |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 26.3.2004 Репутация: нет Всего: нет |
Плохо, очень плохо. Ибо если в точке висит несколько форм, несчитая часиков. Мы никогда не узнаем какая выше.
![]() Или я об этом ничего не знаю? |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 4 Всего: 260 |
Messages, по идее, как то можно работать с z-координатой окон...
|
|||
|
||||
Mechanic |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 6 Всего: 7 |
А если перехватить HitTest мессаги, и рассказывать в них Винде, что юзверь в окно не попал?
![]() --------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
|||
|
||||
Sunvas |
|
|||
![]() Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 28 Всего: 89 |
Z координаты в винде? Это что-то новое! -------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
Mechanic |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 6 Всего: 7 |
Та да.. ZOrder не так давно придумали.. Позже, чем окна.. Минут на 15.. ![]() --------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
|||
|
||||
skyboy |
|
||||||||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 4 Всего: 260 |
Sunvas, гляди:
Честно говоря, времени на поиск+тестирование не было... Вот, что я нашёл:
Формат функции
Вот только, придётся работать с размерами: вдруг следующее по z-order окно наодится не под твои, а далеко от него, а под твоим находится 5-е или 7-е по счёту.... Вот эта функция может пригодиться:
Сорри, что копи-пастю, а не направляю в справку, но тогда пришлось бы обьяснять, как добраться до Windows SDK ![]() |
||||||||
|
|||||||||
Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
В винде нет Z-координат. Есть упорядоченность окон по Z-координате, но это не значит, что существуют и координаты Z.
|
|||
|
||||
Mechanic |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 6 Всего: 7 |
А индекс в ZOrder'е - разве это не координата? Просто единица измерения по оси Z = одно окно vs пиксели по другим осям.
![]() --------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
|||
|
||||
Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
<индекс в Z-последовательности> != <координата> IMHO, но тут уже дело в трактовке. Каждый пологает как ему удобно ![]() |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 4 Всего: 260 |
Yanis, ладно-ладно, пускай будет "Z-порядок". Но тогда для людей, впервые столкнувшимся с подобными вопросами будет не совсем понятно(по крайней мере мне этот термин не кажется "интуитивно понятным"), в то время, как понятие "глубины" или "кординаты z" ближе к привычному человеку трёхмерному миру и потому легче воспринимается.
Добавлено @ 11:00 Понял, в чём загвоздка. Два объекта по определению могут иметь одинаковую координату, а одно и то же место в z-order списке два разных окна занимать не могут! Сорри, был не прав. Это сообщение отредактировал(а) skyboy - 1.6.2006, 11:02 |
|||
|
||||
Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
Последовательность подразумевает, что окна идут друг за другом, перекрываются и т.д.
![]() Я потому и сказал |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 4 Всего: 260 |
Messages, если полностью расписать алгоритм, то:
при помощи GetNextWindow перебираешь все окна, находящиеся ЗА твоим, пока не окончится список окон, или пока не найдёшь окно за своим, в пределах которого находятся координаты клика(размеры текущего обрабатываемого окна получаешь при помощи функции GetWindowRect; принадлежность точки клика прямоугольному региону можно определить при помощи функции PtInRegion); если обнаруживаешь, что окно подходит под параметры, ищешь для этого окна дочерние контролы/окна при помощи EnumChildWindows и для каждого из них(если я не путаю, то в этом месте ты уже будешь перебирать контролы) проверяешь принадлежность точки клика их региону(см. выше), как только найдёшь, необходимо рекурсивно повторить всё начиная с вызова EnumChildWindows, потому что на форме может лежать GroupBox, на нем - панель, на ней - панель и только уже потом - кнопка. Потому надо будет перебирать рекурсивно - чтоб ты не посылала клик панели, а добралась до кнопки. А потом уже, как найдёшь нужный объект, отсылаешь ему сообщение о клике при помощи SendMessage(сначала - сообщение WM_LBUTTONDOWN, а потом - WM_LBUTTONUP). Я вообще почти не работал с Windows API, потому прошу критически относится к моим словам ![]() |
|||
|
||||
Rrader |
|
|||
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 70 Всего: 191 |
Как вариант:
|
|||
|
||||
Mechanic |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 6 Всего: 7 |
![]() И чё, это воркает? /me У него просто нет AlphaBlendValue (D5). ![]() Бо уже покурил даже про XP Ghost Window:
![]() Другой бы спорил.. А мне пофик.. ![]() ![]() --------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
||||
|
|||||
Messages |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 26.3.2004 Репутация: нет Всего: нет |
Rrader, спасибо тебе за хорошую попытку.
![]() Для меня этот код не подходит. Ты просто делаешь дырку в форме вместо определенного цвета. А мне нужно, что бы не дырка. ![]() To ALL, спасибо огромное за труды. Придется перебирать окна. ![]() ![]() Возникает еще проблема. ![]() Ага, меню появляеться выше. Одной проблемой меньше. ![]() ![]() |
|||
|
||||
Sunvas |
|
|||
![]() Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 28 Всего: 89 |
Единственный выход, который я вижу, это использование оверлеев.
-------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
Messages |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 26.3.2004 Репутация: нет Всего: нет |
Sunvas, а раскажи, что это? Ну, и с чем его едят?
![]() |
|||
|
||||
Sunvas |
|
|||
![]() Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 28 Всего: 89 |
-------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
Сам не пробовал но
-------------------- Обижено школьников: 8 |
|||
|
||||
Mailman |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 6.6.2006 Репутация: нет Всего: нет |
Если будет такая возможность, скинь плз вариант исходника данной функции - очень интересно. И полезно будет всем, думаю.
|
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
А функция старая - CreateWindowEx.
-------------------- Обижено школьников: 8 |
|||
|
||||
Messages |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 26.3.2004 Репутация: нет Всего: нет |
bems, спасибо. Но что-то я не могу понять где чего перегрузить, что бы этим свойством обладал мой класс:TForm.
|
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
например в OnCreate формы
SetWindowLong(handle,GWL_EXSTYLE,GetWindowLong(handle,GWL_EXSTYLE) or WS_EX_TRANSPARENT or WS_EX_LAYERED) Добавлено @ 10:23 Но только если у тебя AlphaBlend=true. Или ты используешь апишки для применения прозрачности. Иначе эффект будет несколько другой ![]() -------------------- Обижено школьников: 8 |
|||
|
||||
Messages |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 26.3.2004 Репутация: нет Всего: нет |
bems, все равно как добиваться прозрачности. Главное чтобы клики тоже прозрачные.
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |