2017-01-31 14 views
1

プロシージャ内の図形のプロパティを編集したいとします。 私自身のプロシージャを作成すると、 "undefinded identifier"というエラーが出ます。Delphi:プロシージャ内の宣言されていない識別子

私のフォームの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. 
+0

:あなたはその後、として、フォームクラスのメソッドとして実装

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

? – Sami

+0

フォームにプロシージャに関する情報がありません...追加してください: var frm_main:Tfrm_main;プロシージャaddWheelInsides; ; の実装 はい、サミがあなたの手順にTShapeを追加したように言えます。 – user763539

答えて

4

shp_wheelRightInsideTfrm_mainクラスに属するフィールドですが、addWheelInsides()メソッドは何も属していない裸の通常のメソッドとして宣言しています。したがって、このメソッドはフォームに属するフィールドにアクセスすることはできません。

解決策の1つは、フォームが所有するオブジェクトで操作するメソッドをフォーム自体に移動することです。あなたはprocの上 `TShape`を通過しないのはなぜ

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

shp_wheelRightInsideフィールドは、プロシージャでは表示されません。 shp_wheelRightInsideスコープを解決する代わりに、フォーム内にプロシージャaddWheelInsides()をメソッドとして宣言します。

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を渡します。

関連する問題