Как мне узнать, где будет состыкован элемент управления, и как мне предотвратить стыковку? - PullRequest
2 голосов
/ 06 сентября 2011

Я использую «обычную» стыковку Delphi (с DockSite = True и UseDockManager = True). Теперь есть несколько элементов управления DockSite и несколько закрепляемых форм. Однако предполагается, что не каждая закрепляемая форма помещается на каждом сайте дока.

Формы знают, какой контроль они должны закрепить; органы управления, OTOH, не знают, какую форму принимать или нет.

Моя проблема сейчас в том, что происходит несколько событий, в которых вы можете отменить операцию перетаскивания (или перетаскивания / закрепления): DragOver, StartDock и т. Д. Но все они происходят на стороне «приема», а не сторона контроля, которая сбрасывается; и именно здесь я хотел бы иметь его - чтобы закрепляемая форма могла отказаться от прикрепления к определенному элементу управления.

Есть ли такое событие, я что-то упускаю, или мне придется решать это по-другому?

Ответы [ 2 ]

1 голос
/ 07 сентября 2011

Я подумал, что должен добавить это как ответ, а не просто комментарий.Создайте базовую форму для ваших пользовательских форм и включите в нее свою логику.Тогда каждый элемент управления просто должен знать, как взаимодействовать с одним классом формы.Каждая новая форма стыковки, которую вы создаете, должна была происходить из этой базовой формы.Прелесть этого в том, что вам не нужно создавать собственные версии ваших элементов управления, поскольку все может быть обработано с помощью стандартных обработчиков событий.

0 голосов
/ 18 сентября 2011

Событие OnStartDock вызывается для присоединяемого элемента управления / формы, а не для присоединяемого элемента управления DockSite. Таким образом, вы можете назначить обработчик событий OnStartDock для закрепляемых форм или лучше переопределить виртуальный метод DoStartDock().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...