TPanel в дополнительном блоке (с дизайнером)
Я хочу создать приложение с одним окном, в котором можно получить доступ к нескольким панелям из небольшого меню. Я хочу сдвинуть панели с одной стороны.
Я сделал небольшое демонстрационное приложение, и все работает. Единственная проблема в том, что у меня есть около 7 панелей в одной форме для моего демонстрационного приложения. Трудно следить за этими панелями и менять их, потому что все они расположены друг над другом.
Поэтому я хотел создать дополнительный модуль для каждой панели, где я могу проектировать и изменять панели так, как я хочу, а затем добавлять их в основную форму с помощью кода.
Я посмотрел в файл fmx форм и создал его для панели, а также создал.pas для панели.
unit2.pas:
unit Unit2;
interface
uses ...
type
TPanel1 = class(TPanel)
Label1: TLabel;
end;
var
Panel1: TPanel1;
implementation
{$R *.fmx}
end.
Unit2.fmx:
object Panel1: TPanel1
Left = 0
Top = 0
Caption = 'Panel1'
ClientHeight = 551
ClientWidth = 800
Visible = False
StyleLookup = 'backgroundstyle'
object Label1: TLabel
Position.Point = '(8,8)'
Width = 120.000000000000000000
Height = 15.000000000000000000
TabOrder = 9
Text = 'Panel1'
end
end
Теперь я могу использовать дизайнера для дизайна моей панели. Но когда я хочу использовать его в основной форме, сделав что-то вроде:
Panel1 := TPanel1.Create(Self);
Panel1.Parent := Self;
Я получаю только стандартный TPanel, а не тот, который я разработал.
Когда я сохраняю все то же самое и просто меняю базовый класс с TPanel на TForm, он работает, как и ожидалось (.Show вместо.Parent =, конечно, для тестирования).
Что мне нужно сделать, чтобы превратить мою дизайнерскую панель в основную форму?
Спасибо за любую помощь.
2 ответа
Я бы сделал так, чтобы использовать то, что я называю встроенными формами, что является эквивалентом фреймов в FireMonkey.
Для каждой панели создайте форму и добавьте в нее панель:
type TPanelForm1 = class(TForm)
Panel1: TPanel;
...
Поместите ваши элементы управления внутри панели.
В вашей основной форме создайте экземпляр каждой формы и извлеките ее панель:
procedure TForm1.FormCreate(Sender: TObject);
begin
PF1 := TPanelForm1.Create(Self);
PF1.Panel1.Parent := Self;
PF1.Position := ...
PF1.Align := ...
end;
(Установите свойства Position и Align, как требуется).
Обратите внимание, что если панели маленькие, вы можете добавить их в одну форму и установить каждый родительский элемент отдельно, для больших панелей или для лучшей модульности добавьте по одной к каждой форме.
TPanel
не знает, как загрузить подкомпоненты из ресурса формы. Вот что делает формы и рамки особенными. Если у вас нет доступа к фреймам, вы можете вместо этого создать все подкомпоненты в коде. Вы можете использовать GExperts, чтобы помочь вам начать. Создайте новую форму и создайте ее так, как вы хотите, чтобы ваша панель выглядела. Выберите все компоненты на нем и используйте инструмент GExperts " Компоненты для кодирования". Это поместит некоторый код в буфер обмена. Откройте блок панели и вставьте сгенерированный код в конструктор.
constructor TPanel1.Create(AOwner: TComponent);
begin
inherited;
// paste GExperts-generated code here
end;
Код будет ссылаться на поля, которые не существуют в TPanel1
пока, так иди объявляй пропущенные поля в объявлении класса. Теперь вы можете отказаться от формы, которую вы проектировали, или вы можете сохранить ее для будущих модификаций дизайна. Просто вставьте изменения в предыдущий код.