2013-01-15 9 views
13

Pracuję nad niektórymi komponentami w XE2. Czy istnieje możliwość dodania więcej niż jednostki komponentu do klauzuli uses formularza, w którym została umieszczona?Czy mogę utworzyć niestandardowy komponent Delphi dodawać wiele jednostek do klauzuli uses?

Przykład: Kiedy wybieram TCustomComponent z paczki, którą zbudowałem i zainstalowałem, jednostka CustomComponent jest dodawana do klauzuli uses formularza. Chciałbym również dodać jednostkę GlobalConstants.

Czy ktoś wie, czy można to zrobić?

Odpowiedz

16

Utwórz pakiet czasu projektowania dla swojego komponentu (jeśli jeszcze go nie masz). W tym pakiecie utwórz klasę, która implementuje interfejs ISelectionEditor (najprostszym sposobem jest wyprowadzenie z klasy TSelectionEditor), przesłaniając jej wirtualną metodę RequiresUnits(), aby zgłosić wszelkie dodatkowe jednostki, które mają być wyświetlane w klauzuli uses dowolnego formularza/ramki/modułu danych który używa twojego komponentu. Następnie, aby funkcja pakietu Register() pakietu mogła zarejestrować tę klasę, należy wywołać RegisterSelectionEditor() (oprócz RegisterComponents()).

Indy 10 robi dokładnie to za jego TIdTCPServer, TIdCmdTCPClient i TIdUDPServer składników, aby upewnić się, że IdContext i IdSocketHandle jednostki dodane do uses klauzul. Przyjrzyj się jednostkom IdCoreSelectionEditors.pas i IdRegisterCore.pas, aby zobaczyć, jak Indy je implementuje.

Aktualizacja: the IdCoreSelectionEditors.pas i IdProtocolsSelectionEditors.pas jednostki zostały usunięte z Indy 10 w marcu 2014 roku wszystkie klasy per-komponent SelectionEditor zostały zastąpione nowym jednej klasy realizowanego w samej jednostce IdRegisterCore. Ta nowa klasa SelectionEditor jest zarejestrowana dla wszystkich komponentów Indy i wyszukuje wszystkie wystąpienia dowolnego składnika Indy, który został umieszczony w czasie projektowania, używając RTTI typów danych wszystkich parametrów i wartości zwracanych dla wszystkich przypisanych procedur obsługi zdarzeń, aby wiedzieć, które jednostki do uwzględnienia w klauzuli uses.

Powiązane problemy