kontrolki ActiveX

Transkrypt

kontrolki ActiveX
MICROSOFT FOUNDATION CLASSES
TECHNOLOGIA COM – KONTROLKI ACTIVEX
KONTROLKI ACTIVEX
Od pozostałych typów obiektów COM kontrolki ActiveX odróżniają się na ogół faktem posiadania
interfejsem użytkownika (choć oficjalna specyfikacja tak tego nie określa). Oprogramowanie korzystające z
kontrolki (klient) nazywa się kontenerem. Kod wykonywalny kontrolek ActiveX umieszczany jest w specjalnym pliku o rozszerzeniu OCX. Technicznie rzecz biorąc nie różni się on zresztą od DLL.
Projekt kontrolki ActiveX tworzy się wybierając odpowiedni typ projektu na pierwszej planszy
AppWizarda. Kontrolka ActiveX jest reprezentowana przez obiekt klasy potomnej COleControl. Pod wieloma względami praca z kontrolkami jest zbliżona do pracy z serwerami automatyzacji.
DODAWANIE WŁAŚCIWOŚCI I METOD
Właściwości i metody dodaje się tak samo, jak do serwerów automatyzacji. Jedynym nowym elementem są tzw. właściwości i metody magazynowe (stock) i otaczające (ambient).
Magazynowe właściwości i metody to standardowe elementy zrozumiałe zarówno dla kontrolki, jak
i jej kontenera, i dla obu mający predefiniowane znaczenia. Mają one na celu zapewnienie elementarnej
zgodności pomiędzy różnymi implementującymi je kontrolkami a kontenerami. W przypadku ActiveX pole
do edycji nazwy zewnętrznej jest listą typu combo; aby stworzyć właściwość lub metodę magazynową należy wybrać jedną z proponowanych na tej liście nazw i włączyć opcję Stock. Odtąd będą one dostępne – za
pośrednictwem Get/SetNazwa w przypadku właściwości lub pod swoją nazwą w przypadku metod.
Właściwości otaczające są zaimplementowane w kontenerze kontrolki (stąd nazwa) i stąd zawsze
dostępne – bez potrzeby wcześniejszego tworzenia czy deklarowania. Dostępne są poprzez odwołania do
predefiniowanych funkcji klasy COleControl (np. AmbientBackColor) lub poprzez GetAmbientProperty.
DODAWANIE ZDARZEŃ
Zdarzenia informują kontener, w którym umieszczono kontrolkę, o zaistnieniu określonego warunku
– są więc zgłaszane przez kontrolkę, i zazwyczaj dalej nieobsługiwane. Zdarzenia dodaje się za pomocą zakładki ActiveX Events ClassWizarda. Po użyciu przycisku AddEvent podaje się nazwę zdarzenia – zewnętrzną i wewnętrzną, a także listę przesyłanych parametrów. Istnieje też możliwość zadeklarowania zdarzenia magazynowego. Zgłoszenie zdarzenia odbywa się poprzez wywołanie funkcji o nazwie podanej w
polu InternalName (zwykle FireNazwaZdarzenia).
RYSOWANIE
Rysowanie kontrolek ActiveX nie odbiega w zasadzie od rysowania zwykłych okien w MFC. Procedurę rysującą, OnDraw, tworzy AppWizard. Parametry jej wywołania są nieco bogatsze niż w przypadku
konwencjonalnych okien.
TRWAŁOŚĆ (PERSISTENCY)
Trwałe właściwości (persistent properties) to właściwości, których wartości są przechowywane poza
okresami aktywności kontrolki. Jeśli chcemy ustawić właściwości w arkuszu właściwości Visual Basica lub
konfigurować je ze strony WWW, musimy uczynić je trwałymi. Z drugiej strony trwałość właściwości wydłuża czas ładowania i inicjalizacji kontrolek, tak więc nie należy mnożyć trwałych właściwości bez potrzeby.
Aby włączyć trwałość dla dowolnej właściwości, należy odnaleźć funkcję DoPropExchange (jest
ona tworzona przez AppWizarda) i dodać na jej końcu następujące wywołania (po jednym dla każdej trwałej
właściwości):
PX_TTT(pPX, _T("Nazwa"), zmienna, wart_domyślna);
Klasa COleControl oferuje zestaw funkcji PX_TTT dla różnych typów danych (np. PX_Long,
PX_String); należy wybrać właściwą spośród nich. Obiekt pPX steruje wymianą danych i jest dostarczany do
DoPropExchange jako parametr. Nazwa odpowiada zewnętrznej nazwie właściwości. Dane będą wpisywane
lub pobierane do lub z podanej zmiennej. Przy odczycie danych może zostać zastosowana wartość domyślna.
Podana funkcja jest wywoływana zarówno przy zapisie wartości właściwości, jak i przy ich odtwarzaniu. To,
który z tych dwóch przypadków występuje, można ustalić wywołując pPX->IsLoading().
TWORZENIE ARKUSZY WŁAŚCIWOŚCI
Arkusze właściwości pomagają skonfigurować kontrolkę na etapie jej projektowania (np. w Visual
Basic czy FrontPage). Służą do edycji wartości trwałych właściwości kontrolki.
System uzupełnia arkusz o własną stronę pozwalającą edytować wszystkie trwałe właściwości. Jeśli
to nie wystarcza, można skorzystać z własnej strony właściwości, której wstępny projekt dostarcza AppWizard. Należy użyć edytora zasobów by zaprojektować wygląd strony właściwości, a następnie ClassWizarda
by dodać zmienne odpowiadające elementom okna. W polu optional property name wpisujemy zewnętrzną
nazwę właściwości.
UWAGI O AKTUALIZACJI WŁAŚCIWOŚCI
W razie zmiany wartości trwałych wartości warto wprowadzić dwa dodatkowe wywołania w funkcji
typu Set lub w funkcji notyfikacji:
· funkcja SetModifiedFlag informuje system, że stan kontrolki został zmieniony i powinien zostać
zapamietany,
· funkcja BoundPropertyChanged informuje kontener o zmianie wartości właściwości; parametrem jest identyfikator dispinterfejsu o nazwie dispidNazwaWłaściwości. Wymagana m.in. do w
pełni poprawnej współpracy z Visual Basic.
Funkcja SetModifiedFlag jest automatycznie wstawiana przez ClassWizarda; dla kontrolek, które nie
mają być trwałe, można ja usunąć.
W pewnych przypadkach zmiana właściwości powinna natychmiast skutkować zmianą wyglądu
kontrolki; w takim przypadku można wywołać InvalidateControl.
PEWNE WSKAZÓWKI DOTYCZĄCE OPTYMALIZACJI KONTROLEK
Aby przyspieszyć proces ładowania i inicjalizacji kontrolek można:
· ograniczyć do minimum liczbę właściwości, metod i zdarzeń (kandydatem do usunięcia jest metoda About),
· ograniczyć do minimum liczbę właściwości trwałych,
· zlikwidować własne strony właściwości, poprzestając na standardowej,
· ograniczać liczbę odwołań do MFC (można też przejść na ATL).
KORZYSTANIE Z KONTROLEK
Użycie kontrolek ActiveX w Visual C++ wymaga wprowadzenia kontrolki do projektu za pomocą
opcji Project|Add to project|Components and controls. Kontrolka będzie w pełni obsługiwana zarówno przez
ClassWizarda (tworzona jest klasa C++), jak i edytor zasobów (kontrolka jest wyświetlana na palecie obiektów, obsługiwane są arkusze właściwości itd.).
Użycie kontrolek ActiveX w Visual Basic wymaga zaznaczenia kontrolki w okienku uzyskiwanym
opcją Projects|Components. Powoduje to wprowadzenie kontrolki do palety dostepnych obiektów.
Użycie kontrolek ActiveX w FrontPage wymaga użycia opcji Insert|Advanced|ActiveX control,
zwykle w połączeniu z przyciskiem Customize. Możliwe jest edytowanie właściwości kontrolki za pomocą
dostępnych arkuszy właściwości.
Użycie kontrolek ActiveX w HTML wymaga zastosowania nastepującej konstrukcji:
<object classid="clsid:0D276E33-465D-450D-B682-B296AD7DD9A7" id="OLECtrl1" width="206"
height="174">
<param name="_Version" value="65536">
<param name="_ExtentX" value="5450">
<param name="_ExtentY" value="4604">
<param name="_StockProps" value="9">
<param name="ForeColor" value="0">
<param name="BackColor" value="16777215">
</object>
Identyfikator klasy clsid można łatwo odnaleźć w pliku *.ODL (jako uuid ... coclass).
Kontrolki łatwo współpracują z językami skryptowymi, szczególnie z VBScript. Do zdefiniowanej
powyżej kontrolki można się odwoływać przez OLECtrl1.NazwaWłaściwości lub OLECtrl1.NazwaMetody(...), zaś funkcje zdefiniowane jako Sub OleCtrl1_NazwaZdarzenia(...) obsługują generowane zdarzenia.

Podobne dokumenty