2011-08-15 84 views
1

可能重複:
Replacing a component class in delphi修改VCL組件

沒有人有修改VCL組件,使它們,所以它們相對IDE中默認任何提示?這意味着不一定要從它們下降,而是在不會在後代對象中允許這樣的事情的地方改變功能。如果他們可以用來代替標準組件,那也是一種獎勵。

例如,我想要做的事情之一是TButton上的alpha混合鼠標懸停。我注意到沒有OwnerDraw事件和代碼來修改如何繪製按鈕似乎不在我可以覆蓋的地方。任何建議,或者我將不得不將TButton及其所有祖先從VCL代碼中剝離出來並直接修改它?

+0

我其實覺得這個問題不是重複的,而是太分散和模糊,因此是無法回答的。 –

+0

不是真的重複,鏈接真的不會進一步回答這個問題。這就是說:當你得到一個「你不能覆蓋這個」消息,或者你需要改變一個私有方法中的代碼(「方法在基類中不存在」)時,你會怎麼做?希望這不是「分散和模糊」。 – Glenn1234

回答

3

您可以選擇以下方法之一:

  • 覆蓋表單的ReadState,作爲解釋here
  • 使用的中介類,如解釋herehere
  • 分配一個新WindowProc如解釋here所述。
+1

並且來自TCustomButton,而不是來自TButton。這使您可以更好地控制發佈的屬性。 –

1

您正在提出幾個與開發自定義V.C.L相關的問題。控制。

因爲,它是一個非常擴展的主題,您可能需要瀏覽或搜索有關它的網絡。

作爲一個快速的問題,有幾種開發或擴展控件的方法。

有時,相同的控件可以用不同的方式開發,其他的,它取決於您想要開發的控件的類型。

您還提到如何進行控制,與Delphi I.D.E進行交互。

Delphi控件可以與包一起工作,您可以在沒有控件的情況下使用普通庫創建包,您可能希望在做出控件之前就開始這樣做。

您可以製作一個控件,它根本不會相互影響,只能通過運行該應用程序來工作,然後再添加與Delphi I.D.E的交互。在Delphi中,當你開發一個控件並想將它放在窗體上時,在設計時,它在內部像Delphi一樣是你的應用程序,並且已經有了你的控制權。

1

如果你想改變應用程序中所有TButton的外觀,你可以在不修改VCL的情況下完成它。當有幾百個按鈕組件存在的時候,我認爲沒有必要自己修改甚至子類化一個VCL控件。例如,對於alpha混合鼠標,只需檢查TMS控件。

但是,對於DIY技巧,方法一(推薦爲簡單)是簡單地將所有TButton從應用程序中取出並用其他方法替換。VCL組件更換(全球)很容易通過gExperts完成。要了解如何將標準控件外觀(按鈕的外觀)與Delphi代碼中繪製的某些重疊元素相結合,請參閱TBitBtn作爲示例。我建議您檢查TBitBtn來源,並從中開始,而不是繼承TButton或TCustomButton。

方法二(不推薦這麼簡單)是開始使用皮膚系統,它可以在標準控件上繪製完全不同的外觀。