Как да деактивирам "прихващането" на събития чрез контроли?
Вероятно ще задам най-глупавия въпрос, дори исках да пиша в раздела за начинаещи, но все пак е по-близо до винапи:)
Има формуляр, върху който се контролира специално - 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 за всяка карта. Създайте списък с тях за всяка "стая" или каквото и да го наричате, щяло да се премести, след това да унищожи.
Може би по пътя ще се появят някои по-гениални идеи за изпълнение? Би било много полезно!
- Как да деактивирам фоновите процеси на Android
- Snake Sabbath, Dankor онлайн, Новини, събития от град Суми и Сумска област
- Какви празници Значими събития Паметните дати се празнуват на 1 март
- Как да си върнете правата, без да ходите пред съд
- Игри Мечове и сандали 2, 3, 4 играят онлайн безплатно