Delphi - форма внутри формы - PullRequest
       21

Delphi - форма внутри формы

7 голосов
/ 19 марта 2010

По эстетическим соображениям я хочу показать форму поверх другой формы, как если бы это был компонент, скажем, как TPanel. Его размер должен изменяться вместе с родителем, перемещаться по мере того, как его родитель теряет заголовок и т. Д.

-----------------------------
| main form component 1     |
-----------------------------
| main |  the 'embedded'    |  
| form |  form goes here    |
|comp 2|                    |
-----------------------------

я могу это сделать? Если так, то как?


Я сейчас склоняюсь к MDI ...

Ответы [ 3 ]

21 голосов
/ 19 марта 2010

Поместите панель там, где вы хотите, чтобы ваша встроенная форма находилась во время разработки. Во время выполнения создайте форму, затем установите свойство Parent встроенной формы для панели.

procedure TParentForm.FormCreate(ASender: TObject);
begin
  FEmbeddedForm := TEmbeddedForm.Create(self);

  FEmbeddedForm.Parent := Panel1;
  FEmbeddedForm.Align := alClient;
  FEmbeddedForm.Visible := True;

end;

Edit:

Если вы хотите, чтобы заголовок и граница окна не отображались, добавьте это в нижнюю часть FormCreate()

  LForm.Caption := '';
  LForm.BorderStyle := bsNone;

Кстати, я не защищаю использование парных форм над фреймами, просто отвечаю на вопрос. Фреймы отличные (я использую их все время), но они не точно такие же, как формы. Они почти как панель с элементами управления.

Например, у фрейма нет ни события OnCreate, ни события OnShow, которое иногда может быть болезненным, когда вы используете их повторно и нуждаетесь в таком поведении.

N @

11 голосов
/ 19 марта 2010

Вы можете использовать кадр .

2 голосов
/ 20 марта 2010

Родной win32 MDI считается "устаревшим". Я думаю, вы можете искать что-то вроде библиотеки JEDI JvDocking. Я использую его для эмуляции MDI, но без поддержки win32 MDI.

...