2017-01-31 5 views
1

프로 시저 내에서 셰이프의 속성을 편집하고 싶습니다. 그러나 내 자신의 프로 시저를 만들면 "정의되지 않은 식별자"오류가 발생합니다.델파이 : 프로 시저에서 선언되지 않은 식별자

내 양식의 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

왜 당신이 당신의 PROC에'TShape'를 통과하지 않는 : 당신이 다음과 같은 폼 클래스의 방법으로 구현

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; 구현 예, 그렇다면 Sami가 TShape를 프로 시저에 추가하는 것이 좋습니다. – user763539

답변

4

shp_wheelRightInsideTfrm_main 클래스에 속하는 필드이고 addWheelInsides() 메서드는 아무 것도 소유하지 않은 알몸의 일반 메서드로 선언 한 것입니다. 따라서이 메서드는 폼에 속한 필드에 액세스 할 수 없습니다.

한 가지 해결 방법은 양식이 소유 한 개체에서 작동하려는 메서드를 양식 자체로 이동하는 것입니다.

procedure Tfrm_main.addWheelInsides(); 
begin  
    shp_wheelRightInside.Height := 42; 
end; 
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를 전달합니다.