Как встроить форму firemonkey в элемент управления? - PullRequest
6 голосов
/ 29 января 2012

Я попытался встроить форму в поле прокрутки:

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 и за пределами границ формы.

Моя идея - поместить формувнутри панели, и оба внутри прокрутки.Каждая форма представляет собой сложный элемент с несколькими элементами управления и прочим (причина не использовать ListBox? Создание элемента управления Firemonkey гораздо сложнее, чем просто создать форму и внедрить ее)

Ответы [ 3 ]

5 голосов
/ 29 января 2012

Секрет в том, как вы проектируете свою дочернюю форму.

Вам необходимо создать элемент управления в виде контейнера, скажем, TLayout (без стиля), TRectangle (базовый стиль) или TPanel.Я бы пошел с TLayout.Выберите имя для своего контейнера, скажите «Контейнер» для аргументации.Теперь создайте свою дочернюю форму и просто назначьте Parent of Container своему родительскому объекту.

Итак, из вашего кода выше (я полагаю, TControlView - ваша дочерняя форма):

procedure TfrmMain.FormCreate(Sender: TObject);
var
  Control:TControlView;
begin
  Control := TControlView.Create(Self);
  Control.Container.parent := ListControls;
  Control.Container.width := 800;
end;
0 голосов
/ 19 декабря 2015

Вот пошаговая инструкция:

  1. Создайте вложенную форму. Поместите TLayout с выравниванием alClient на вашу форму. Разместите все элементы управления внутри этого макета:

    TFormEmbedded = class(TForm)
        LayoutMain: TLayout;
        //....
    end;
    
  2. Создайте свою мастер-форму.

  3. Поместите макет в основную форму, которая позже будет содержать подчиненную форму.

  4. Добавьте следующий код в FormCreate вашей основной формы:

    procedure TFormMaster.FormCreate(Sender: TObject);
    var
        SubForm: TFormEmbedded;
    begin
        SubForm := TFormEmbedded.Create(Self);
        SubForm.LayoutMain.Parent := Self.LayoutSubForm;
    end;
    

Спасибо nexial за оригинальное описание .

0 голосов
/ 10 мая 2012

Необходимо установить для свойства ClipChildren элемента управления контейнера значение true.

...