Как выровнять MDIChild по левому краю? - PullRequest
1 голос
/ 14 апреля 2010

Я стараюсь выровнять форму MDIChild слева от родительского параметра MDIForm. Align: = alLeft во время разработки. На Parent MDIForm панель инструментов выровнена по alTop. Выровненный MDIChild выше, чем родительская клиентская область (я не знаю почему), поэтому вертикальная полоса прокрутки появляется в родительской форме. Проблема в том, что я хочу, чтобы эта форма создавалась динамически; поместив вертикальный Splitter между этими формами MDIchild, чтобы определить их размер мышью. Но когда я создаю Splitter, он полностью выравнивается слева, как будто форма MDIChild вообще не была выровнена (alLeft).

Я установил параметры MDIChild:

Align:=alLeft;
Windowstate:=wsNormal; 
Borderstyle:=bsSizable;

Кто-нибудь решал эту проблему раньше?

большое спасибо

P.S Delphi 7, Win XP

Ответы [ 3 ]

0 голосов
/ 15 апреля 2010

Если вы используете интерфейс MDI просто для помещения «выровненных» форм внутри основной формы, я предлагаю вам использовать другой подход, например, работать с основными и дочерними формами fsNormal и закреплять дочерний элемент внутри родительской формы (возможно в панели).

Если вам интересно, взгляните на метод ManualDock для дочерней формы и свойство DockSite для основных панелей формы.

В этом случае обычные сплиттеры будут хорошо работать для вас.

0 голосов
/ 19 апреля 2010

Лучшее решение, которое я нашел, основано на комбинации подхода TFrame и обычного TForm. Я создал все границы, строку заголовка, кнопки форм и их поведение в объекте TFrame из различных компонентов (TPanel, TButton, TShape). Этот объект я ставлю на «нормальный» TForm. Я устанавливаю свойства TForm на:

TForm.FormStyle: = fsNormal; TForm.BorderStyle: = bsNone; TForm.WindowState: = wsMaximized;
TForm.Align: = alClient;

и программно я запатентовал этот TForm в контейнер TPanel, который был обычным TPanel со свойством alClient.

0 голосов
/ 14 апреля 2010

MDI-потомки обрабатываются отдельно от обычных вложенных элементов управления, таких как TSplitter, поэтому такие вещи, как «Align: = alLeft», не будут работать с ними Область MDI - это то, что осталось после того, как все остальные элементы управления выровнены.

Лучше всего использовать кадры или размещать дочернюю форму непосредственно в форме без использования поддержки MDI (установите Child.Parent := MainForm). Если вы действительно хотите использовать поддержку MDI, я думаю, вам нужно написать свой собственный компонент TMDISplitter. Вы можете попробовать создать TSplitter во время выполнения, используя TSplitter.CreateParented(MainForm.ClientHandle), но я сомневаюсь, что он будет работать.

...