簡體   English   中英

Delphi - 如何從XE8開始正確注冊圖形類?

[英]Delphi - How to correctly register a graphic class since XE8?

我正在編寫一個Delphi包,它提供了一個新的自定義TGraphic對象,允許在像TImage這樣的VCL組件中讀取新的圖像格式。

我最初使用RAD Studio XE7開發了這個軟件包,效果很好。 但是我最近遷移到了一個較新的RAD Studio編譯器版本,雖然我的軟件包繼續在新版本上正常工作,但我注意到一個以前從未出現的奇怪錯誤。

我有一個包含多個組件的表單,其中一些是TImage組件。 打開IDE后,第一次在設計時打開項目時,包含我的自定義TGraphic組件的所有TImage組件都會丟失其內容。 如果我關閉然后重新打開項目,圖像會重新出現,並且在我關閉並重新打開IDE之前不再發生錯誤。

我挖掘了我的代碼,以了解可能導致問題的原因。 要注冊我的自定義TGraphic組件,我使用類初始化部分,其中我編寫了以下代碼:

initialization
begin
    Vcl.Graphics.TPicture.RegisterFileFormat('svg', 'Scalable Vector Graphics', TWSVGGraphic);
end;

但是我發現,自從XE8編譯器版本以來,在我的初始化部分之前調用了TImage構造函數,因此顯然導致了上述問題。 自XE8以來的所有編譯器版本都受到影響,但此錯誤在XE7或更早版本中從未發生過。 所以自XE8以來發生了一些變化。

這是我的問題:

  • 我用於注冊我的自定義圖形類的方式是正確的嗎?
  • 如果沒有,這樣做的正確方法是什么?
  • 由於XE8以來看起來有些不同,注冊我的圖形組件的新方法是什么?
  • 還有其他人遇到過同樣的問題嗎? 他是如何解決的?
  • 這可能是一個新的RAD Studio錯誤,還是問題在我身邊?

這很可能是IDE應用於設計時包的智能加載的副作用。 您可以通過在程序包的“注冊”過程中調用ForceDemandLoadState(dlDisable)來覆蓋此行為。

有關這一點的更多信息可以在更新版本的Delphi而不是XE8的文檔中找到: 在設計時包中明確禁用智能加載組件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM