2013-12-17 20 views
8

IDEからフォームにTXMLDocumentを追加すると、ユニットXml.XMLDoc, Xml.xmldom, Xml.XMLIntf, Xml.Win.msxmldomが自動的に追加されます(保存時/コンパイル時)。IDEがこれらのユニットを追加する方法を自動的に追加します。私はなぜ/どのようにXMLDoc(それにはTXMLDocumentが含まれています)が追加されているのですが、他のものはどうですか?コンポーネントをフォームに追加すると、Delphiユニットは自動的にどのように追加されますか?

DOMVendorをMSXMLからADOM XML v4に変更すると、Xml.adomxmldomが自動的に(次のコンパイル時に)追加されます。この時点で私はXml.Win.msxmldomを自動的に取り除かずに削除できます。 IDEはコンポーネントプロパティに基づいてこれをどのように認識していますか?

私はこの質問には2つの理由があります.1つは好奇心ですが、2番目に多くのユニット(数百)の使用セクションをクリーンアップしています。このプロジェクトはDevExpressを使用しており、追加のファイルのヒープを用途に追加します。たとえば、TcxSpinEditを追加し、次にcxSpinEdit, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters, cxContainer, cxEdit, cxTextEdit, cxMaskEditを追加します。私は、コントロールがフォームから削除されているuses節を最小限に抑えたいと思っています(しかし、その単位はuseに残っています)ので、それらがより良く追加されるプロセスを理解する必要があります。

+0

IDEは、モジュールを保存する前に、uses節に移入されます。 –

+1

これはちょっと話題にはなりますが、CNPackは良いUses節をきれいにしてくれます。 –

+0

@HughJonesうん、これは私の使っているものですが、私の多くのユニットで使用をきれいにすることはできません。 )が、検出には適しています。また、Icarusは、インタフェースの実装から実装までユニットを移動できることを示しています。 – Alister

答えて

13

コンポーネントは、デザイナーの存在がユニットのuses句に特定のユニットを追加するように指示できます。彼らはRegisterSelectionEditorTSelectionEditorのサブクラスを登録するように呼び出すことによってそうする。これらのサブクラスはTSelectionEditor.RequiresUnitsをオーバーライドし、追加する必要のあるユニットを指定します。例えば

uses 
    DesignEditors; 
.... 
type 
    TMySelectionEditor = class(TSelectionEditor) 
    public 
    procedure RequiresUnits(Proc: TGetStrProc); override; 
    end; 

procedure TMySelectionEditor.RequiresUnits(Proc: TGetStrProc); 
begin 
    Proc('MyUnit'); 
end; 

procedure Register; 
begin 
    RegisterSelectionEditor(TMyComponent, TMySelectionEditor); 
end; 
関連する問題