Это продолжение этого вопроса:
Перемещение элементов управления между компонентами Delphi
Во время разработки я помещаю элементы в свой собственный TPanel, но когда я записываю их в DFM, я меняю их имена
procedure TPanelDialogo.VolcarFrameEnLista( );
var
i: integer;
Componente: TControl;
begin
// recorrer el frame y rescatar sus componentes
if FDesignPanel = nil then
exit;
for i := FDesignPanel.ControlCount - 1 downto 0 do
begin
Componente := FDesignPanel.Controls[i];
if Pos( self.Name + '_', Componente.Name ) = 0 then
begin
Componente.Name := self.Name + '_' + Componente.Name;
end;
if FListaComponentes.IndexOf(Componente) < 0 then
begin
FListaComponentes.Add( Componente );
end;
end;
end;
procedure TPanelDialogo.GetChildren(Proc: TGetChildProc; Root: TComponent);
var
i: integer;
OwnedComponent: TComponent;
begin
if FDesignPanel <> nil then
VolcarFrameEnLista();
for i := 0 to self.FListaComponentes.Count - 1 do
begin
OwnedComponent := FListaComponentes.Items[i];
Proc(OwnedComponent);
end;
end;
Во время разработки, когда я помещаю метку в пользовательский TPanel, эта метка добавляется к форме в файле .pas:
При записи в файл DFM я переименовываю метку, как было показано ранее, поэтому объявление в файле .pas больше не действует.
Это файл .pas
type
TForm1 = class(TForm)
CRTTESTPANEL: TGENPant;
PanelDialogo1: TPanelDialogo;
Label1: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;
А это DFM
object Form1: TForm1
...
object CRTTESTPANEL: TGENPant
...
end
object PanelDialogo1: TPanelDialogo
...
object PanelDialogo1_Label1: TLabel
...
end
end
end
Итак, я получаю это сообщение об ошибке:
И, после нажатия «Да», это файлы DFM и pas:
TForm1 = class(TForm)
CRTTESTPANEL: TGENPant;
PanelDialogo1: TPanelDialogo;
private
{ Private declarations }
public
{ Public declarations }
end;
object Form1: TForm1
...
object CRTTESTPANEL: TGENPant
end
object PanelDialogo1: TPanelDialogo
...
object PanelDialogo1_Label1: TLabel
...
end
end
end
Я бы хотел избежать записи объявления метки в файл .pas. Я видел этот вопрос , но он относится к записи в файл DFM, а не к pas.
Есть ли способ сделать то, что я хочу?