我創建了一個簡單的設計時組件,它有助於選擇並在同一表單上展示其他組件。 (在單個監視器環境中設計全屏幕形式時,比IDE對象樹視圖更方便)。但在Delphi XE2中,我無法可靠地確保並檢測到幫助器組件本身位於頂端。當我選擇它時,IDE會在其周圍繪製8個藍色球作爲標記,並且在我看來,這些標記是實際頂級窗口的一部分。在delphi設計器的頂部保留一個控件
那麼,如何檢查在IDE設計器中是否選擇了某個組件?
我創建了一個簡單的設計時組件,它有助於選擇並在同一表單上展示其他組件。 (在單個監視器環境中設計全屏幕形式時,比IDE對象樹視圖更方便)。但在Delphi XE2中,我無法可靠地確保並檢測到幫助器組件本身位於頂端。當我選擇它時,IDE會在其周圍繪製8個藍色球作爲標記,並且在我看來,這些標記是實際頂級窗口的一部分。在delphi設計器的頂部保留一個控件
那麼,如何檢查在IDE設計器中是否選擇了某個組件?
那麼,如何檢查在IDE設計器中是否選擇了某個組件?
爲您的組件創建一個設計時編輯器(確保在僅包含designtime的包中實現它,而不是運行時包),並使用RegisterComponentEditor()
進行註冊。 TComponentEditor
具有Designer
屬性來訪問表單設計的IDesigner
接口,其中有一個GetSelections()
方法:
procedure GetSelections(const List: IDesignerSelections);
IDesignerSelections
具有Count
和Items[]
性能,其中Items[]
返回TPersistent
對象。因此,您可以循環查看您想要的組件對象(所有組件都從TPersistent
派生)。
IDesigner
也有SelectComponent()
和SetSelections()
方法,這樣你就可以有需要的表單設計器中選擇其他組件:
procedure SelectComponent(Instance: TPersistent); overload;
procedure SelectComponent(const ADesignObject: IDesignObject); overload;
procedure SetSelections(const List: IDesignerSelections);
對不起,我無法將其格式化爲'代碼'。請有人刪除它。 – malom
@malom:你應該可以自己刪除它。 –
你知道你可以「釘住」了'結構View',並調用它'Shift' - 'Alt' - 'F11'? –