Podstawy tworzenia i wykorzystania kontrolek ActiveX w InTouch`u
Transkrypt
Podstawy tworzenia i wykorzystania kontrolek ActiveX w InTouch`u
INFORMATOR TECHNICZNY WONDERWARE Informator Techniczny nr 59 04-12-2002 Podstawy tworzenia i wykorzystania kontrolek ActiveX w InTouch’u Wstęp PoniŜsza dokumentacja oparta na przykładach stworzonych w środowisku Visual C++ przedstawia etapy postępowania w celu stworzenia i wykorzystania kontrolek ActiveX w InTouch’u. Omówienie Kontrolki ActiveX charakteryzują się trzema podstawowymi parametrami, z których programista moŜe dowolnie korzystać. Są to właściwości kontrolki, metody oraz zdarzenia. Właściwości kontrolki pełnią w pewnym stopniu funkcję zmiennych często modyfikowanych przez aplikację-pojemnik, metody są funkcjami, które kontrolka udostępnia aplikacji-pojemnik zaś zdarzenia są komunikatami przesyłanymi z kontrolki do aplikacji-pojemnik. Aplikacją-pojemnik nazywamy środowiska, które umoŜliwiają osadzanie kontrolek ActiveX i współpracę z nimi. Są to np. Visual Basic, Visual C++ a takŜe InTouch. Proces tworzenia kontrolki ActiveX rozpoczynamy od utworzenia nowego projektu określając typ projektu jako MFC ActiveX ControlWizard. W przypadku prostej kontrolki ustawienia w pozostałych oknach kreatora pozostawiamy bez zmian. Wybór projektu kontrolki ActiveX w kreatorze aplikacji. ASTOR Sp. z o.o. Dział Oprogramowania Przemysłowego ul. Smoleńsk 29, 31-112 Kraków tel.: 012 428-63-30 fax: 012 428-63-09 e-mail: [email protected] http://www.astor.com.pl Przedstawiony przykład kontrolki realizuje operacje wyliczenia mocy czynnej turbogeneratora. W tym celu naleŜy zadeklarować tyle właściwości kontrolki ile jest potrzebnych zmiennych do wyliczenia mocy turbogeneratora. Dokonujemy tego w kreatorze klas w zakładce Automation wybierając przycisk Add Property dla kaŜdej właściwości. Dla zmiennych, które mają tylko przyjmować wartości z aplikacjipojemnik wybieramy w polu Implementation opcję Member variable zaś dla zmiennych, które mają mieć moŜliwość równieŜ przekazywania swojej wartości do aplikacji-pojemnik wybieramy opcję Get/Set methods. Następnie poprzez Data Binding określamy sposób ich powiązania jako Bindable property. Omówione kroki przedstawiają poniŜsze rysunki. 2 Dla zmiennych przyjmujących jedynie wartości z aplikacji-pojemnik generowana jest automatycznie funkcja (::OnzmiennaChanged()) powiadamiająca kontrolkę o kaŜdej zmianie wartości danej zmiennej. Dla zmiennych mogących przekazywać swoje wartości do aplikacji-pojemnik generowane są funkcje Get i Set wywoływane przez aplikację-pojemnik w celu pobrania i zmiany wartości danej zmiennej (właściwości). Dodatkowo naleŜy uŜyć kilku funkcji w celu poinformowania aplikacji-pojemnik o dokonanych zmianach danej właściwości. W tym celu stosujemy następujące funkcje InvalidateControl() , BoundPropertyChanged(dispidWłaściwość). PoniŜej przedstawiono przykład funkcji OnzmiennaChanged() dla zmiennych jedynie przyjmujących wartości z aplikacji-pojemnik oraz funkcje Get i Set dla zmiennych powiązanych (Data Binding). void CMocCzynnaTgCtrl::OnK2Changed() { // TODO: Add notification handler code SetMocCzynna(m_mocCzynna); SetModifiedFlag(); } float CMocCzynnaTgCtrl::GetMocCzynna() { // TODO: Add your property handler here m_mocCzynna=m_k1*(m_qMPEC+m_qSTOMIL+m_qSTAB)+m_k2*(m_q30+m_q17+m_q08); return m_mocCzynna; 3 } void CMocCzynnaTgCtrl::SetMocCzynna(float newValue) { // TODO: Add your property handler here m_mocCzynna=m_k1*(m_qMPEC+m_qSTOMIL+m_qSTAB)+m_k2*(m_q30+m_q17+m_q08); SetModifiedFlag(); InvalidateControl(); BoundPropertyChanged(dispidMocCzynna); } W przypadku chęci deklaracji metody kontrolki naleŜy z Kreatora klas z zakładki Automation wybrać Add Method zaś w przypadku chęci wykorzystania kontrolki do generacji komunikatów naleŜy z zakładki ActiveX Events wybrać Add Event. Dla przykładu wykorzystano metodę MetodaAX generującą okienko z odpowiednią wiadomością. Zdefiniowano zdarzenie generacji podwójnego kliknięcia na obszarze kontrolki w celu uruchomienia skryptu ZdarzenieDBAX w InTouch’u wywołującego metodę kontrolki DoClick() , którą obsługuje funkcja OnClick dodana w Kreatorze klas na zakładce Message Maps /Messages. PoniŜej zamieszczone zostały kody źródłowe omówionych funkcji: void CMocCzynnaTgCtrl::MetodaAX() { // TODO: Add your dispatch handler code here MessageBox("Wywołałeś metodę kontrolki ActiveX pokazującą tę wiadomość"); } void CMocCzynnaTgCtrl::OnClick(USHORT iButton) { // TODO: Add your specialized code here and/or call the base class MessageBox("Wygenerowałeś komunikat do aplikacji-pojemnik o kliknię ciu na kontrolce ActiveX na co aplikacja odpowiedziała wywołaniem skryptu obsługującego to zdarzenie"); COleControl::OnClick(iButton); } Wykorzystanie kontrolki ActiveX w InTouch’u sprowadza się najpierw do jej zainstalowania zgodnie z opisem zamieszczonym w instrukcji InTouch’a a następnie do zdefiniowania powiązań pomiędzy właściwościami kontrolki a zmiennymi InTouch’a, np. tak jak na rysunku poniŜej. 4