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