2017-01-31 28 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

爲什麼你不通過'TShape'您PROC? – Sami

+0

窗體不知道任何關於您的過程...添加它: var frm_main:Tfrm_main; 程序addWheelInsides; 執行 是的,你可以像薩米所說的添加TShape到你的程序。 – user763539

回答

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; 
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作爲參數來代替。