Cepгей Poщин дата публикации 22-03-2006 16:01 КАТЕГОРИЯ | | БИБЛИОТЕКА.VCL.TCustomDockForm.Неправильное положение окна-носителя (Float формы) | ПРОДУКТ | | BDS 2005,2006 | ПЛАТФОРМА | | Windows |
Если любой орган управления со свойством DragKind=dkDock, попытаться отсоединить от родительского компонента и бросить в свободную область экрана, то он займет не то положение, которое ему указывалось пользователем, а то, которое ему указала система. Это проявляется в Delphi 2005 и BDS 2006 (SP1).
Такое поведение связано с тем, что в Delphi до версии 7 включительно по-умолчанию свойство Position равнялось poDesigned (для всех форм). В более поздних версиях это свойство стало равняться poDefaultPosOnly, т.е. положение формы определяется системой. Для окна-носителя (TCustomDockForm) необходимо, чтобы его координаты определялись программно.
- Создать потомка TCustomDockForm, в конструкторе которого присвоить свойству Position значение poDesigned. Затем для каждого присоединяемого органа управления указать этот класс окна-носителя.
Panel2.FloatingDockSiteClass := TDockFormEx;
- Изменить исходный код модуля Forms:
constructor TCustomDockForm.Create(AOwner: TComponent);
begin
CreateNew(AOwner);
AutoScroll := False;
BorderStyle := bsSizeToolWin;
DockSite := True;
FormStyle := fsStayOnTop;
Position := poDesigned;
end;
Скачать тест StoneTest_96.zip (5k)
Эффект имеет место быть. Проверить в D7 удалось, поставив Position := poDefaultPosOnly в коде примера вместо poDesigned.
Может быть, у Борланда были уважительные причины изменить положение формы по-умолчанию, но до проверки, как это повлияет на все специальные случаи, руки не дошли.
«Большие программы подобны спагетти на тарелке: тянешь с одной стороны — что-то движется с другой.»
(c) Д. Ван Тассел
[TCustomDockForm] [Интерфейс. Компоненты и формы] [Docking]
Обсуждение материала нет сообщений |