2012-06-13 57 views
1
TMyPanel = class(TPanel) 
public 
    procedure AfterConstruction; override; 
end; 

procedure TMyPanel.AfterConstruction; 
begin 
    inherited AfterConstruction; 
    Caption := ''; 
end; 

我想在施工期間清除標題,但是這段代碼並沒有像我期望的那樣工作。 它不會將標題設置爲空字符串。 如果我將「'(空格)分配給標題,它將保留,但這不是一個合適的解決方案。如何在施工期間在TPanel後裔中設置標題?

我使用德爾福2006年

+1

如果標題在設計期間不是空的,那麼在施工期間分配空字符串不起作用。 – hubalu

+0

如果你想要一個面板,默認情況下,當你將它放在窗體上時,它沒有標題,請看這裏:http://stackoverflow.com/questions/9850176/tmemo-descendant-with-empty-lines –

回答

5

試試這個:

uses 
    ExtCtrls, StrUtils; 

type 
    TMyPanel = class(TPanel) 
    public 
    procedure Loaded; override; 
    end; 

procedure TMyPanel.Loaded; 
    inherited; 
    Caption := EmptyStr; 
end; 

測試,並顯示在XE2做工精細。

編輯

這部作品的原因何在,因爲Loaded被稱爲後,對象的屬性值已經從DFM文件分配到OP所示的方法不算。

AfterConstruction重寫的通話發生在最初創建的對象後,但之前的屬性值已經從窗體的DFM分配,這意味着無論你AfterConstruction方法分配屬性值將被立即更換無論在DFM中爲相同的屬性指定了什麼值。

Loaded發生在施工順序的末端,所以無論您指定的值是什麼,都將是最終的。

+1

謝謝,它作品!順便說一句,你爲什麼分配EmptyStr而不是''?該文件表示它僅用於向後兼容。 – hubalu

+0

如果你解釋了爲什麼它解決了問題,這將是一個更好的答案。我的意思是,我知道它爲什麼會這樣做,但是爲了那些不知道解釋的人的利益將會很有用。 –

+1

我使用EmptyStr,因爲我討厭在代碼中定義字符串文字(即使它只是一個空字符串)。我寧願讓共同的字符串定義一次,然後引用該常量/資源。 – LaKraven