Как избежать записи компонента в определении формы в файле .pas - PullRequest
0 голосов
/ 07 июня 2019

Это продолжение этого вопроса: Перемещение элементов управления между компонентами 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:

Label in pas file

При записи в файл 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

Итак, я получаю это сообщение об ошибке: Error message

И, после нажатия «Да», это файлы 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.

Есть ли способ сделать то, что я хочу?

1 Ответ

1 голос
/ 08 июня 2019

Когда вы создаете Label1 во время разработки, Delphi автоматически добавляет его в интерфейс tForm. Но нет никаких причин, чтобы оставить его там. Вы можете удалить его. Это просто для удобства, так что вы можете ссылаться на него из своего кода. Если в вашем коде нет ссылок на идентификатор Label1, вы можете удалить его из интерфейса в файле .PAS.

...