Este bine cunoscut faptul că componentele VCL pot fi create dinamic, în timpul execuției. De exemplu, dacă următorul cod este executat în handlerul de evenimente asociat clicului unui buton, când faceți clic pe buton la momentul executării, apare un câmp de text dintr-o singură linie:
Dacă componenta TEdit nu era prezentă pe paleta de componente, atunci acest cod ar fi de asemenea executat cu succes - cu crearea dinamică a VCL-com-pontains, nu este necesar ca acestea să fie prezente în paleta de componente.
De obicei, în Delphi cu controale ActiveX funcționează după cum urmează. Mai întâi selectați comanda Componentă ► Importare comandă ActiveX, elementul ActiveX selectat este plasat mai întâi pe paleta de componente, apoi - pe formular și în inspectorul de obiecte, proprietățile sunt modificate și sunt create manipulatoarele de evenimente. Aceasta ridică problema inițializării unui control ActiveX la momentul executării. Mai degrabă, pot crea o instanță de lucru a unui control ActiveX în timpul executării unei aplicații, dacă nu o înregistrez în paleta Componente?
Din discuția de mai sus, este clar că, în plus față de inițializarea și de a crea o copie de lucru a controlului ActiveX pentru aplicarea lucrărilor necesare pentru a crea un VCL-kopteyper, care va fi plasat controlul ActiveX. Rolul unui astfel de recipient în Delphi joacă clasa TOleControl declarată în modulul OleCtrls.pas. Metoda de bază a acestei clase - InitControlData. În această metodă, trebuie să determine GUID a claselor fabrică controlul ActiveX, numărul de manipulare eveniment și de interfață implementate în legătură Stivuitoare eveniment client, precum și un link către interfața de licență necesare pentru a apela metode de interfață IClassFactory2. Metoda InitControlData se numește automat după ce a lucrat designer de TOleControl
Creați o nouă aplicație și, în secțiunea interfață, declarați o nouă clasă - descendentă a clasei TOIeControl:
Implementarea metodelor InitControlData și EmbeddAX ar trebui să arate astfel:
Plasați butonul pe formular și creați un simplu procesator de evenimente:
Acum puteți rula aplicația creată și faceți clic pe buton în timpul executării. Un control ActiveX apare în zona specificată. Înlocuiți GUID Factory Class cu următoarea valoare:
Fig. 2,24. Inițializarea unui control ActiveX neînregistrat la momentul executării
Atât primul și al doilea element de control ale testului nu sunt înregistrate în componentele Delphi paleta. În principiu, același mod poate fi făcută la orice unul înregistrat în serverele registru COM având o cheie de registru în secțiunea de control de identificare a fabricii de clasa GUID. Prezența acestei secțiuni asigură suportul pentru interfețe COM-Ser-Verom IOleClientSite, IOleControlSite, IOlelnplaceSite, care sunt necesare pentru a afișa controlul ActiveX pe client.