Как вставить форму firemonkey внутри элемента управления?
Я попытался внедрить форму внутри прокрутки:
procedure TfrmMain.FormCreate(Sender: TObject);
var
Control:TControlView;
begin
Control := TControlView.Create(Self);
Control.BorderIcons := [];
Control.parent := ListControls;
Control.width := 800;
ListControls.AddObject(Control);
Control.Visible:= True;
end;
Однако форма отображается за tfrmMain и вне ребер формы.
Моя идея поместила форму внутри панели и как внутри scrollbox. Каждая форма представляет собой сложный элемент с несколькими элементами управления и т.д. (Причина не использовать ListBox? Создание управления Firemonkey намного сложнее, чем просто сделать форму и встроить ее).
Ответы
Ответ 1
Секрет в том, как вы создаете свою дочернюю форму.
Вам нужно создать элемент управления в качестве контейнера, например, TLayout (без стилизации), TRectangle (Basic styling) или TPanel. Я бы пошел с TLayout. Определите имя для своего контейнера, скажем "Контейнер" для аргументации. Теперь создайте дочернюю форму и просто назначьте родительский контейнер контейнера вашему родительскому объекту.
Итак, из вашего кода выше (я предполагаю, что TControlView является вашей дочерней формой):
procedure TfrmMain.FormCreate(Sender: TObject);
var
Control:TControlView;
begin
Control := TControlView.Create(Self);
Control.Container.parent := ListControls;
Control.Container.width := 800;
end;
Ответ 2
Вам необходимо установить свойство управления контейнером ClipChildren
на true
.
Ответ 3
Вот пошаговая инструкция:
-
Создайте свою встроенную форму. Поместите TLayout с выравниванием alClient
в вашу форму. Поместите все элементы управления внутри этого макета:
TFormEmbedded = class(TForm)
LayoutMain: TLayout;
//....
end;
-
Создайте свою основную форму.
-
Поместите макет в свою основную форму, которая позже будет содержать подформат.
-
Добавьте следующий код в FormCreate вашей основной формы:
procedure TFormMaster.FormCreate(Sender: TObject);
var
SubForm: TFormEmbedded;
begin
SubForm := TFormEmbedded.Create(Self);
SubForm.LayoutMain.Parent := Self.LayoutSubForm;
end;
Благодаря nexial для оригинального описания.