|
Вопрос # 48/ вопрос открыт / |
|
Уважаемые эксперты.
Первый раз пытаюсь использовать docking технологию. Попытки изучить этот вопрос по хелпам и по сторонним статьям многого не дали. Вопросы в следующем:
Прложение MDI. Внем создается Child форма, основное пространство которой занимает рисунок по Canvac. Чтобы пристыковать к ней другое окно (также с рисунком по Canvac) я положил на форму компотент типа TPanel и уже ему назначил свойства DockSite := True, DragKind := dkDock, DragMode := dmAutomatic. Окно, которое должно стыковаться с панелью, соответственно имеет DockSite := False, DragKind := dkDock, DragMode := dmAutomatic.
При создании Child окна, я сразу пристыковываю к панели необходимое окно при помощи методов Dock и DockManager.InsertControl. Получаю требуемую картинку. До сих пор все хорошо. Теперь вопросы
1. Каким образом, при отстыковке, я могу задать размеры отстыковываемой формы?
2. Как запретить отстыковываться самой панели по DblClick в отдельное окно, когда я уже отстыковал мою форму?
3. Можно ли управлять размером панели на основной (Child форме), кроме как установкой Splitter'а?
4. Почему ClientHeight и ClientWidth у Child формы не подстраиваются с учетом размеров DockSite панели?
Заранее благодарен, всем кто проявит внимание
 |
Вопрос задал: Мартынов Михаил (статус: Посетитель)
Вопрос отправлен: 20 июня 2006, 20:17
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Косолапов Дмитрий Юрьевич
В двух словах и не объяснишь... Для начала я бы посоветовал внимательнейшим образом изучить демо Docking.
1. Присвой необходимые размеры в событии OnUnDock формы.
2. Странно, что панель у тебя отстыковывается, вроде бы не должно быть так... Кстати, может быть делать Dock не на Child-форму, а на главную?
3. Вероятно, нет.
4. Странно это... Может быть, в этот момент как раз сама панель отстыковалась???
 |
Ответ отправил: Косолапов Дмитрий Юрьевич (статус: 8-ой класс)
Время отправки: 21 июня 2006, 09:12
Оценка за ответ: 2
Комментарий к оценке: В демо Docking на поставленные вопросы ответов нет, также как нет их в явном виде и вHelp'ах D7, D2005.
1. Первый вопрос снят. При перекапывании исходников найдены два соответствующих свойства: UndockHeight и UndockWidth. А в событии OnUnDock формы простым присвоением размеров ничего сделать нельзя. Так что совет бесполезный.
2. Эффект наблюдается еще более интересный: по DblClick на Docking zone, еще при не отстыкованном окне появляются вообще два окна- одно мое, а другое с DockSite панелью. А Dock на Child форму обязательное в данном случае условие
3. Непонятно, каким образом все таки изменяются размеры панелей у Марко Кенту в примерах на его сайте. Никаких сплиттеров он не применяет
4. Этот эффект происходит в любые моменты, которые я мог отследить в отладчике. При этом панель постоянно присутствует на форме
|
Мини-форум вопроса
Всего сообщений: 13; последнее сообщение — 24 июня 2006, 17:13; участников в обсуждении: 3.
|
Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 21 июня 2006, 13:02 [#1]:
Возможно, свойства выствалены не совсем корректно, попробуй поставить так:
Panel:
DragMode:=dmManual
UseDockManager:=true
DragKind:=dkDrag
Form:
DragMode:=dmManual
UseDockManager:=true
Потенциально может решить проблему с отстыковкой самой панели.
Кстати, все события по обработке Docking'а у тебя ведь для панели описаны?
Вот, и еще в той же деме Дельфиновой, есть такая фишка: при UnDock ширине панели присваивается 0, Сплиттер скрывается; при DockDrop, соответственно, обратный процесс. Возможно, это будет полезно...
|
|
Мартынов Михаил (статус: Посетитель), 21 июня 2006, 15:28 [#2]:
Уважаемый Дмитрий Юрьевич
Спасибо за дельный совет. Присвоение DragMode:=dmManual дало положительный результат с отстыковкой.
По поводу второго совета. Панель по UnDock действительно убирается, но потом невозможно реализовать на таком элементе управления другие события, не только DockDrop, но также и DockOver, GetSiteInfo.
|
|
Ерёмин А.А. (статус: *Администратор), 21 июня 2006, 16:23 [#3]:
Мартынов Михаил: следите за тем, что делаете. 12 одинаковых сообщений - это слишком!
|
|
Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 21 июня 2006, 19:03 [#4]:
Странно, что не получается... В моей вот программе, да и в деме, все вроде бы работает, надо только точнее наводить курсор мыши (насколько я помню, лучше всего работает левый верхний угол).
|
|
Мартынов Михаил (статус: Посетитель), 21 июня 2006, 19:36 [#5]:
О какой деме вы говорите?
|
|
Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 21 июня 2006, 20:18 [#6]:
Да все в той же - Docking...
Кстати, пока не забыл... Вместо методов Dock+InsertControl можно (а может быть и нужно, если верить Help'у) использовать один метод ManualDock для формы, которую надо "прилепить".
И вот, только сейчас, кстати, дошло, что ClientWidth/ClientHeight и не должна подстраиваться под свободную (от TPanel) область... Ширину (и высоту) свободной области надо как раз считать каждый раз. Она будет изменяться только если изменяется размер самой формы.
|
|
Мартынов Михаил (статус: Посетитель), 22 июня 2006, 10:56 [#7]:
Большое спасибо, Дмитрий Юрьевич, за ваше внимание к моей проблеме. С вашей помощью я уже прилично продвинулся вперед. Но чувствую, что не хватает знаний в этой области. Не знаете ли вы источника информации по данной проблеме, где было бы последовательно и интегрированно изложено каким образом работать с Docking. В helpax информация очень разрозненна и очень не полная. Я не хочу занимать ваше время и порой не знаю как правильно задать вопрос. Получается: Да не работает и все!
|
|
Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 22 июня 2006, 12:12 [#8]:
Проще всего, наверное, купить какую-нибудь серьезную книгу по Дельфи...
|
|
Мартынов Михаил (статус: Посетитель), 22 июня 2006, 12:26 [#9]:
У меня достаточно серезных книг по Дельфи, но только у Марко Канту есть два маленьких параграфа по Docking. Может вы знаете такую книгу. Буду благодарен за любую информацию
|
|
Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 22 июня 2006, 16:19 [#10]:
Увы и ах... Если только что-нибудь типа руководства разработчика...
|
|
Мартынов Михаил (статус: Посетитель), 22 июня 2006, 18:58 [#11]:
Уважаемый Дмитрий Юрьевич, давайте возьмем на денек тайм-аут. Необходимо "переварить" информацию и попробовать сделать что-нибудь конструктивное
|
|
Мартынов Михаил (статус: Посетитель), 24 июня 2006, 12:29 [#12]:
Добрый день, Дмитрий Юрьевич
Нашел одну интересную закономерность. Если у панели Sita ставить надо DragMode:=dmManual, то у формы клиента необходимо оставить dmAutomatic, иначе ее невозможно становится перетаскивать (как я вам писал раньше). Для меня остается нерешенным вопрос, как убрать с глаз панель, оставив ее функциональность. Похоже надо задей ствовать Docking свойства главной формы
|
|
Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 24 июня 2006, 17:13 [#13]:
По поводу панели: либо Visible:=false после отстыковки, либо все-таки Width:=0. Я вот у себя последний способ применяю, и все работает... А делал я практически 1 в 1 с демой Docking.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|