2012-03-09 44 views
0

未申報我有這樣的:德爾福VCL:表單元素自定義過程/函數

procedure Welcome(user: string; accesslevel: integer); 
begin 
    if accesslevel>= 10 then btCustomers.Text = 'Customer overview'; 
end; 

雖然,在窗體上存在按鈕,BTCUSTOMERS被宣佈爲「未聲明的標識符」。我錯過了什麼?

P.S.我知道這應該由窗體OnCreate處理,但歡迎程序從外部窗體調用。

+1

你爲什麼要使用一個程序,不屬於任何類的成員?如果'btCustomers'是'TMyForm'的成員,'procedure TMyForm.Welcome'將有權訪問'btCustomers'。面向對象編程=好主意。 – 2012-03-09 19:12:13

回答

5

,你可以到引用傳遞到形式,使得按鈕可以反過來引用。

procedure Welcome(form: TMyForm; user: string; accesslevel: integer); 
begin 
    if accesslevel>= 10 then form.btCustomers.Text = 'Customer overview'; 
end; 

但是,你有作爲它的第一個參數的對象引用全局範圍功能的時候,你該對象的方法的候選者。所以,請將方法添加到TMyForm

procedure TMyForm.Welcome(user: string; accesslevel: integer); 
begin 
    if accesslevel>= 10 then btCustomers.Text = 'Customer overview'; 
end; 

,並調用它是這樣的:

MyForm.Welcome(user, accesslevel); 
+3

如果你使用全局函數,那麼我會讓它返回新的字符串作爲輸出,而不是直接更新Button。調用窗體然後可以決定在函數退出時如何處理該輸出,例如更新其本地按鈕。這樣一來,函數就不太可能失敗,並且不瞭解它的使用方式,所以如果需要的話,它可以重用於其他目的。 – 2012-03-09 22:36:59

+0

這是一個很好的觀點。 – 2012-03-09 22:40:18