Soluții - PC Magazine Romania, Mai 2004
ActiveX (2)
Konstantin Klyagin
Urmare din numarul trecut
Alte comodități
Probabil ca cei curioși s-au întrebat deja, cum oare pot să pun o descriere
la o proprietate. Într-adevăr, punând cursorul pe proprietăți standard vedem
că jos, sub denumirea acestora, apare un text descriptiv.
Un asemenea mesaj se poate defini chiar în fișierul .odl, cuvântul cheie fiind
"helpstring". Pentru a oferi utilizatorului un confort mai mare în
timp ce el face design, putem scrie câte o propoziție pentru fiecare proprietate
a controlului. De exemplu:
[id(1), helpstring("Culoarea afisajului aratat de catre domnul Vasile")] vasile_Culoare Culoare;
Proprietăți-referințe la alte controale
Dacă tot vorbim despre proprietăți, înainte de încheiere să privim cu atenție
cel mai interesant caz, acesta fiind proprietăți de tipul referință la un alt
control ActiveX. De exemplu, având un control care reprezintă o conexiune FTP,
am putea dori să avem posibilitatea de a-l conecta la un canal de comunicare
prin care să opereze ulterior. În mod normal, ar fi logic să setăm proprietatea
"Connection" cu controlul care reprezintă conexiunea (din cod in VB):
FTP1.Connection = Connection1
Deoarece nu prea avem conexiuni, protocoale de rețea, iar exemplele noastre
nu necesită nici un dial-up amarât, să ne întoarcem privirile înapoi pe Vasile.
Putem să-i găsim și lui niște puncte în care se poate intersecta cu alte controale:
locul de muncă (proprietatea Uzina), marca de țigări preferată, nevastă. J Presupunem
că avem interfața Dana cuprinzând metoda Spala(), la care câteodată trebuie
să apeleze Vasile.
Pentru a face o astfel de legatură între două controale ActiveX, se folosește
interfața abstractă IUnknown. Imediat aflăm cum lucrăm cu ea.
În primul rând, creeam propritatea. În ClassView alegem "Add Property.."
și setăm LPUNKNOWN ca tipul acesteia. Metoda SetNevasta() acum va accepta orice
altă interfață, iar pentru a o folosi avem nevoie de o variabilă internă:
class VasileCtrl : public oleControl { ... DANALib::_DanaCtlPtr nevasta; }
De asemenea, ca să avem acces la metodele și proprietățile acestei componente
și ca preprocesorul să recunoască tipul _DanaCtlPtr, trebuie să importăm biblioteca
respectivă de tipuri în header:
#import "dana.tlb" Setarea se face astfel: void CVasileCtrl::SetNevasta (LPUNKNOWN newValue) { nevasta = static_cast< DANALib::_DanaCtlPtr >(newValue); if(nevasta == NULL) ThrowError(CTL_E_INVALIDPROPERTY- VALUE); SetModifiedFlag(); }
A doua linie verifică dacă valoarea nouă se referea la un control de tipul
la care ne așteptam. În sfârșit, în caz de nevoie, apelăm la controlul asociat,
cum ar fi el o clasă C++ obișnuită:
nevasta->Spala();
Iar înainte de folosire în VB, nu uităm să setăm proprietatea noastră cu o
valoare:
Vasile1.Nevasta = Dana1
Fiind lămuriți complet cu proprietățile în ActiveX, luna viitoare mergem mai
departe și ne vom apuca de alte aspecte ale vieții personale a lui Vasile, precum
și lucrul cu tipuri de date COM și pagini de proprietăți. Ne vedem atunci.
|