Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:33
Выполнено за 0.02 сек.