德尔福:程序中未申报的标识符

时间:2017-01-31 16:43:46

标签: function delphi procedure undeclared-identifier

我想在过程中编辑形状的属性。 但是,如果我创建自己的程序,我会收到“未完成的标识符”错误。

我尝试在我的表单的OnCreate事件过程中编辑属性,这样就可以了。

为什么会这样,我该如何解决?

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls;

type
    Tfrm_main = class(TForm)            
    shp_wheelLeftInside: TShape;
    shp_wheelRightInside: TShape;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }

  public
    { Public declarations }
  end;

var
  frm_main: Tfrm_main;

implementation

{$R *.dfm}

procedure addWheelInsides();
begin

    shp_wheelRightInside.Height := 42;           //this is where the error occurs

end;

procedure Tfrm_main.FormCreate(Sender: TObject);
begin

   shp_wheelLeftInside.Height := 42;
   shp_wheelRightInside.Height := 42;

  addWheelInsides();

end;

end.

2 个答案:

答案 0 :(得分:4)

问题在于shp_wheelRightInside是属于您的Tfrm_main类的字段,而addWheelInsides()方法是您声明为裸露的普通方法,不属于任何内容。因此,该方法无权访问属于表单的字段。

一种解决方案是将打算对表单所拥有的对象进行操作的方法移动到表单本身。

  Tfrm_main = class(TForm)            
    shp_wheelLeftInside: TShape;
    shp_wheelRightInside: TShape;
    procedure FormCreate(Sender: TObject);
  private
    procedure addWheelInsides();  {declare it here}    
  public
    { Public declarations }
  end;

然后,您将其作为表单类的方法实现为:

procedure Tfrm_main.addWheelInsides();
begin    
  shp_wheelRightInside.Height := 42;   
end;

答案 1 :(得分:2)

您的程序中看不到shp_wheelRightInside字段。 将表单中的过程addWheelInsides()声明为方法,而不是解析shp_wheelRightInside范围。

type
    Tfrm_main = class(TForm)            
    shp_wheelLeftInside: TShape;
    shp_wheelRightInside: TShape;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure addWheelInsides;

  public
    { Public declarations }
  end;

如果要将过程扩展到多个单位,请将TShape作为参数传递。