функция ComponentAtPos, причем 99 процентов с этим врятли столкнуться, поэтому и спрашиваю совета. Суть, если пишешь составной контрол с достаточно сложной иерархией, когда для стриминга контрол с чайлдами выглядит как связка TControl -> TComponent -> TControl (т.е. 3 уровня, причем чайлды третьего уровне парентом есесно имеют рута с первого, а компоненты второго чисто виртуализация) .
Так вот при вызове ComponentAtPos лазарь дергает GetChild руту, и получает на выходе коллекцию TComponent у которых (блин) берет их координаты (как, зачем, и главное нахрена - не понятно) и т.к. это компонент и координаты у него квадрат 24 на 24, он считает что этот компонент вне диапазона мыши и просто не перебирает его чайлдов, которые уже реальные контролы.
Я конечно обошел это костылем у себя в классе, и вот думаю - нужно ли патчить саму функцию или оставить как есть? Могу в качестве примера накидать демку которая может показать суть проблемы (но мин 30-40 займет, уже и так башка не варит).
Сань, надо патчить. Я натыкался на неправильное определение координат мыши в линухе https://forum.lazarus.freepascal.org/index.php/topic,44027.msg309123.html#msg309123
Угу, гляну в ПН пример, может это не из этой серии\
Илюха а тебе не кажется что метод GetChild у компонента подразумевает у него наличие чайлдов? :)
Стикер
ок, просëк, значит действительно у них поломано
Я если чесно вообще не понял зачем у них так сделано и есть вызов этой поломаной фунции когда у них контрол над которым произошел клик СРАЗУ приходит как Sender - зачем они делают лишние действия по поиску его-же, вообще не понятно
Обсуждают сегодня