| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Обработка событий |
| Автор: mrVerus 30.11.2009, 08:27 |
| Доброго времени суток! Подскажите как научить свой созданный обьект откликатся на события7 |
| Автор: mrVerus 30.11.2009, 09:07 |
| Если поподробние, создаются несколько объектов одного класса, при перемещении мыши они должны откликатся на это событие. Как это можно реализовать7 |
| Автор: mrVerus 30.11.2009, 09:55 | ||
|
| Автор: amsoft 30.11.2009, 10:46 |
| может сделать наследника от TControl |
| Автор: mrVerus 1.12.2009, 07:18 |
| Мне нужен обьект этого класса, так как мне научить его откликатся на события7 Пожалуйста помогоите |
| Автор: Frees 1.12.2009, 07:32 |
почитать учебник...или статью http://www.rsdn.ru/article/Delphi/makecomponents.xml |
| Автор: mrVerus 1.12.2009, 08:32 | ||
Что здесь не верно
|
| Автор: sCreator 1.12.2009, 11:23 | ||
| Неверно почти все Там ничего почти не видно. ( посмотреть бы саму реализацию, а пока будем делать предположения). Думаю нестоит переопределять TNotifyEvent , если нужно напиши TMyNotifyEvent . Первоначально твой класс рисует что то на конкретной канве и может перемещать свой рисунок. При этом ни канва ни объект на чьей канве рисуется ему не передается, значит строго задан. И в цепочке обработки событий он не участвует. Сделал Ты его от TControl и прописал владельца ( Owner ) - только владелец если упрощенно отвечает за своевременное уничтожение принадлежащих ему компонентов. А вот назначение свойства TControl.Parent уже покажет на чьей канве он расположен. Далее есть еще BoundsRect определяющее размеры и положение твоего объекта на канве. И Visible показывающее рисуется он или нет. Enabled - показывающее принимает ли он события. Вот на основании этих свойств Parent ( TWinControl ) и будет передавать ( или нет ) ему сообщения. Посмотри в модуле Controls
а также TWinControl.IsControlMouseMsg и TWinControl.ControlAtPos Там механизм и условия передачи от Парента к Контролу расписаны. Ну а дальше немного переделать его рисование с учетом выше названных свойств на канве Парента. |
| Автор: sCreator 1.12.2009, 11:52 | ||||
| Порядок дальнейшей доделки, думаю, такой: - наследуй его от TGraphicControl - реализуй функцию procedure Paint; override; ( перенеси из Draw ) ( там должно быть рисование с учетом положения ( ClientRect) на канве предоставляемой TGraphicControl ) - Draw у тебя будет просто вызывать Repaint - move(mx,my:integer) должно просто изменять BoundsRect и возможно вызывать Repaint - присваиваешь Parent - задаешь размеры ( BoundsRect или по отдельности Left, Top и т.д. ) - делаешь видимым ( Visible := True ) - Enabled вроде бы по умолчанию включено пробуешь ловить события ( можешь прикрепить обработчики к OnMouseDown например или переписать ( override ) методы procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); dynamic; Поправил - в Paint надо использовать ClientRect Вот простейшая реализация:
Использовать
|