如何避免在.pas文件的表单定义中编写组件

时间:2019-06-07 11:07:29

标签: delphi delphi-7 dfm

这是此问题的后续内容: Moving controls between Delphi components

在设计时,我将元素放入自定义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文件。我见过this question,但它与写入DFM文件有关,而不与pas有关。

有没有办法做我想做的事?

1 个答案:

答案 0 :(得分:1)

在设计时创建Label1时,Delphi会自动将其添加到tForm界面中。但是没有理由您不必把它留在那里。您可以删除它。它只是为了方便起见,因此您可以从代码中引用它。如果您的代码未引用标识符Label1,则可以从.PAS文件的界面中将其删除。