Как да деактивирам "прихващането" на събития чрез контроли?

прихващане

Вероятно ще задам най-глупавия въпрос, дори исках да пиша в раздела за начинаещи, но все пак е по-близо до винапи:)

Има формуляр, върху който се контролира специално - TImage. Създавам ги димамично, но не същността.

формулярът има отговор на OnMouseMove, MouseDown/Up и куп събития

и какво се случва, когато мишката е над детския контрол - ess-но, събитието OnMouseMove на формуляра не възниква, но се задейства събитието със същото име

и трябва да обработя събитието в манипулатора на формуляри!

Досега направих следното, за всички контроли задавам събития, които делегират обработка на събитие във формуляр, като например:

но някак си е грозно. Може би съм пропуснал нещо, може би е възможно да деактивирам прихващането на събития от детски контроли?

прихващане

събития

патица го. същият байда, дори го опита - щом влезете в родителския контрол, това е. съобщенията отиват при него, т.е. в празнота.

очевидно въпросът тук не е толкова делфи, колкото винапи, и доколкото разбирам, въпросът е за основните концепции за изпращане на събития от Венди

прихващане

тук има две неща:
1) ако мишката е над детската контрола - наследникът на TGraphicControl (като TImage, който споменахте), тогава формулярът получава съобщение на Windows, но генерира събитие за детския контрол от него. Ето и първия ми съвет.
2) ако мишката е над детския контрол - наследник на TWinControl (както всички контроли, които могат да бъдат родителски за други), тогава Windows изпраща съобщение директно до прозореца на този контрол. И тук вероятно можете да използвате куки

Добавено по-късно:
Точно сега проверих дали манипулаторът на съобщения трябва да е в припокриващата се процедура WndProc
и методът на съобщението се извиква твърде късно. вероятно затова е имало "същата байда"

всички контроли

Благодаря! стана малко по-ясно. Не, няма да използвам куки. Ще напиша процедура, ще прегледам всички контроли на формуляра и ще прекъсна OnMouseMove и така нататък, така че обаждането да бъде изпратено обратно към съответните манипулатори на формуляри:)

по пътя това се оказва най-красивото решение)) и без да е обвързано с винапи, всичко е чрез обвивки на делфи, т.е. не трябва да изглежда бъги в почти всяка перспектива

контроли

Не, това е просто някакъв кошмар!:)

В началото всичко започна добре. Интересуват ме само събития с мишка, по-точно тези три събития, които според мен обхващат всички задачи на „мишката“:

По някаква неизвестна за мен причина всички събития на TControl са включени в защитената секция!
Предполагам, че това е така, защото наборите от събития за различните наследници са различни. Следователно не беше възможно просто да преминете през Компонентите, като зададете съответните събития за тях, - трябва ръчно да прегледате всички възможни типове:(

всичко работи с гръм и трясък, но това е пълен шибан!

това е краят на идеята за „красота“. Четох за куки в свободното си време.

контроли

всички контроли

Можете да използвате този метод за задаване на атрибути

Тъй като SizeOf (TMouseEvent) = 8 (64bit) може да SetInt64Prop годни.
Някак като

PS: B да студийни резултати. Чудя се дали SetInt64Prop работи или не.

контроли

всички контроли

Извинявам се! Затрупан от работа. Тук някак се изчистих, връщам се към проекта си.

Благодаря за отговорите! но . татко

Невалиден тип на класа на класа.

така че не стигнах до задаване на атрибутите:(

И ето още един. Ако имате TImage, който използвате само за красота, той може да бъде разрешен: = Вярно, тогава всички събития "остават във формуляра".

по дяволите работи!

Да, имам TImage заради това, само за да има къде да кача снимката. И какви подводни камъни може да има, ако го отхвърля?

Като цяло целта е тази. Пиша игра за дете, всички обекти на екрана са различни картични картички, които всъщност според сценария могат да се влачат от едно място на друго, някои не се влачат, а играят ролята на бутони. като цяло се обработват само три събития с мишката.

Картите са много. Реших да се отърва от VCL колкото е възможно повече, самият аз ще организирам мениджъра на картини, определям кой е над мишката. Въпреки това, за да не се занимавам с преначертаване на картината, реших да използвам свой собствен TImage за всяка карта. Създайте списък с тях за всяка "стая" или каквото и да го наричате, щяло да се премести, след това да унищожи.

Може би по пътя ще се появят някои по-гениални идеи за изпълнение? Би било много полезно!