Unele caracteristici puțin cunoscute ale controalelor activex, computerpress

Tehnologia COM (Component Object Model) a fost dezvoltată activ de Microsoft în ultimii ani și continuă să evolueze și să continue să fie susținută. Prin urmare, astăzi există numeroase publicații care explică principiul funcționării și scopului obiectelor COM. În consecință, tehnologia ActiveX, ca și una dintre instrucțiunile COM, este, de asemenea, discutată pe larg în presă. Există o literatură suficientă care detaliază principiul de lucru și atribuirea controalelor ActiveX, crearea, utilizarea, adăugarea de noi proprietăți și metode, crearea de noi agenți de procesare a evenimentelor și așa mai departe. Cu toate acestea, unele aspecte legate de crearea și utilizarea controalelor ActiveX nu sunt încă pe deplin acoperite în literatură. Această publicație compensează parțial golurile din descrierile disponibile ale cititorului de a crea și de a lucra cu controale ActiveX. Acesta vă va spune cum să creați agenți de procesare a evenimentelor în documente HTML și să discutați problemele de securitate ale controalelor ActiveX și cum să le accesați dinamic. Ca exemple de instrumente de dezvoltare folosite Delphi 6. Se presupune că cititorul are o experiență cu această formulare de agent și, în special, deține elementele de bază și aplicații COM crearea de controale ActiveX în Delphi.







Adăugați proprietăți noi și dispozitive de gestionare a evenimentelor la controlul ActiveX.
Testarea ActiveX într-un document HTML

Creați un nou control ActiveX cu fișierul Delphi | Nou | Altele ..., selectați fila ActiveX și apelați expertul Library ActiveX. Salvați proiectul ca AXTest. Apoi reveniți din nou la elementul de meniu File | Nou | Altele ... | ActiveX și apelați Expertul pentru formularul activ. În dialog, schimbați noua proprietate ActiveX Nume în AFTest. Pe formularul primit, plasăm o etichetă (Tabel) și un buton (TButton).

Spre deosebire de definiția unei noi proprietăți a controlului ActiveX atunci când creați un nou eveniment după ce rulează în modul Refresh AFTestImpl1.pas Nu există spații libere apar pentru punerea în aplicare a codului. Iar acest lucru este de înțeles: codul pentru procesarea evenimentului va fi implementat în aplicația client care va folosi acest control ActiveX. În controlul ActiveX în sine, trebuie să apelați acest handler. Deoarece sa decis că evenimentul creat este asociat butonului Button1, îl numim din metoda Button1.OnClick:

Verifică dacă este vorba de FEvents <> nil este necesară, deoarece aplicația client poate să nu accepte interfața de notificare, caz în care o încercare de a apela o metodă inexistentă va avea ca rezultat o excepție.

Deci, executați comanda de meniu Project | WEB opțiuni de implementare și completați dialogul (Figura 3).

Dacă această imagine nu a fost obținută, atunci acțiunile ulterioare sunt inutile. Motivele pentru care nu puteți porni controlul ActiveX în Microsoft Internet Explorer pot fi:

  • IIS sau PWS nu este instalat;
  • Opțiunile din caseta de dialog Opțiuni de implementare WEB nu sunt completate corect;
  • Sistemul de securitate nu este coborât la nivel scăzut.

Crearea de manageri de evenimente în documente HTML

Pentru a crea un handler de evenimente într-un document HTML, utilizați proiectul anterior. În fișierul AXTest.htm creat, efectuați următoarele modificări (codul adăugat este evidențiat cu caractere aldine):

Pentru a lucra cu limbile de scripting, controlul trebuie să aibă un identificator (id = în etichetă ), al cărui nume este accesat din cod în aceste limbi. eveniment nume handler trebuie să înceapă cu un identificator, urmat de subliniere (_), apoi - numele handler evenimentului, așa cum este definit în dispinterface control ActiveX. Dacă manipulatorul de evenimente are parametri, atunci aceștia sunt de asemenea enumerați.

Revenind la această pagină din Microsoft Internet Explorer și făcând clic pe butonul Run script, puteți vedea modificările în antetul etichetei (Figura 5).

Dacă utilizați controlul ActiveX cu Delphi 3, când încercați să rulați scriptul cu unele setări ale Microsoft Internet Explorer, este posibil să primiți un mesaj de la browser despre conținutul potențial periculos al programului. Cum să evitați acest lucru este descris în următoarea secțiune.

Sistemul de securitate Microsoft Internet Exprorer și semnătura digitală

Semnătura electronică, pe lângă informațiile despre producător, conține, de asemenea, o serie de alte informații utile. De exemplu, dacă fișierul * .OCX a fost modificat după adăugarea semnăturii electronice, acest lucru va fi raportat imediat înainte de lansarea acestui control.

Pentru dezvoltarea comercială a controalelor ActiveX, este recomandabil să achiziționați Microsoft ActiveX SDK. Pe lângă documentația detaliată și o serie de resurse utile, aceasta conține programul MAKECER, care generează certificate de testare.

Astfel, obținerea unui certificat electronic internațional în țara noastră este o problemă gravă astăzi. În același timp, absența unei semnături electronice de către utilizator duce fie la reamintirea constantă a acestuia în legătură cu acest lucru (sau chiar la interzicerea descărcării controalelor ActiveX cu un nivel ridicat de securitate a browserului), fie îl obligă să dezactiveze sistemul de securitate Internet. Desigur, disponibilitatea unui certificat electronic nu garantează absența conținutului potențial periculos, dar, cel puțin, îi permite clientului să stabilească o sursă de conținut periculos. În plus, recodează fișierul utilizând algoritmi criptografici moderni și calculează sumele de control. Dacă cineva încearcă să modifice codul controlului ActiveX, o astfel de încercare va fi detectată imediat utilizând sumele de control și acest control ActiveX nu va funcționa în Microsoft Internet Explorer. Prin urmare, prezența unei semnături electronice este de dorit chiar și atunci când lucrați pe intranet și, chiar și atunci când controlul ActiveX rulează pe Internet, este pur și simplu necesar.







Să revenim la proiectul anterior. Toate testele descrise aici sunt efectuate cu Microsoft Personal Web Server 5.0. și Microsoft Internet Explorer 5.0. Nivelul de securitate Microsoft Internet Explorer trebuie setat la Custom. Valorile tuturor opțiunilor legate de comenzile ActiveX din dialogul care apare în această fereastră de dialog sunt setate la Prompt.

și un script cu manipulatorul de evenimente OnBtClick, așa cum este descris în secțiunea anterioară. Apoi, puteți începe testarea sistemului de securitate Microsoft Internet Explorer.

După prima accesare a paginii HTML care conține ActiveX, este descărcată și este copiată în directorul WINNT \ Downloaded Program Files. În plus, este verificată prezența unei semnături electronice (care în cazul nostru este absentă). Dacă nivelul de protecție setat în Microsoft Internet Explorer este scăzut, utilizatorul va primi un mesaj care să ateste că poate fi executat un potențial conținut periculos. În cazul în care utilizatorul nu are obiecții în acest sens, atunci fișierul * .OCX primit este înregistrat în registrul sistemului și proprietățile acestuia sunt citite din pagina HTML utilizând interfața IPersistPropertyBag (a se vedea mai sus). În același timp, se reia un dialog, din care reiese clar că, deși elementul nostru de control este sigur, dar poate fi accesat din scripturi (Figura 6).

În plus, ar trebui să acordați atenție opțiunii "Initializați și script-ul controalelor ActiveX care nu sunt marcate ca fiind sigure" în caseta de dialog Setări de securitate din Microsoft Internet Explorer. Deși valoarea opțiunii a fost setată la Prompt și parametrul URL a fost inițializat din documentul HTML, nu a fost primit un avertisment. Astfel, Microsoft Internet Explorer consideră că acest control ActiveX este sigur din punctul de vedere al inițializării datelor și executării de scripturi.

Motivul pentru aceasta este că controalele ActiveX, create cu versiuni Delphi mai vechi de 3, suportă interfața IObjectSafety. Această interfață definește două metode:

INTERFACESAFE_FOR_UNTRUSTED_CALLER (= 1, permite accesul anonim la interfață)

INTERFACESAFE_FOR_UNTRUSTED_DATA (= 2, permite unui utilizator anonim să trimită date la interfață).

Să presupunem că creatorul controlului ActiveX crede că atunci când execută scripturi sau când datele sunt inițializate incorect, acest control poate provoca daune clientului. În acest caz, trebuie să rescrieți metodele implementate IObjectSafety. Dacă controlul ActiveX este implementat în clasa TActiveXControl, atunci acest lucru nu este dificil, deoarece ambele metode IObjectSafety sunt declarate virtuale în secțiunea protejată. Dar pentru clasa descendentă TActiveForm acest lucru nu se poate face, deoarece forma activă nu este descendentă a clasei TActiveXControl. Pentru a schimba metodele IObjectSafety în forma activă, trebuie să reintroduceți interfața specificată. În acest caz, metodele noii interfețe "umbresc" pe cele vechi și, prin urmare, vor fi chemați de către clienți.

Mai întâi, adăugați interfața IObjectSafety la lista interfețelor TAFTest suportate:

TAFTest = clasa (TActiveForm, IFilledBox, IObjectSafety)

În plus, secțiunea privată definesc două metode - GetInterfaceSafetyOptions și SetInterfaceSafetyOptions c stdcall Directiva apel, și secțiunea de punere în aplicare a crea punerea în aplicare a acestor metode:

Rezultatul testării acestei aplicații diferă de cel precedent (Figura 7).

Vedem că Internet Explorer avertizează utilizatorul despre pericolul posibil al conținutului. Cu valoarea nivelului de securitate de nivel mediu, acest control va fi lansat automat, dar datele sale nu vor fi inițializate, la fel cum scripturile nu vor fi executate. Același efect este atins atunci când butonul No este apăsat în dialogul pe care îl oferă Microsoft Internet Explorer (a se vedea Figura 7).

Inițializare dinamică a controalelor ActiveX în aplicație

Este bine cunoscut faptul că componentele VCL pot fi create dinamic, la timpul de execuție. De exemplu, în cazul unui handler de evenimente asociat clicului unui buton, executați codul:

În Delphi cu controale ActiveX și funcționează după cum urmează: mai întâi comanda de meniu Component | Importați controlul ActiveX, ActiveX selectat este plasat pe paleta de componente, apoi este plasat pe formular și în proprietățile inspectorului de obiect sunt modificate și sunt create manipulatoare de evenimente. Se pune întrebarea: Cum pot inițializa un control ActiveX la timpul de execuție - adică fără înregistrarea ActiveX pe paleta de componente, să creeze o instanță operațională în timpul executării aplicației?

Din cele de mai sus, este clar că, pe lângă inițializarea și crearea unei instanțe de lucru a controlerului ActiveX, aplicația trebuie să creeze un container VCL pentru ao rula. Rolul unui astfel de container în Delphi este realizat de clasa TOleControl, care este declarată în modulul OleCtrls.pas. Metoda de bază a acestei clase este InitControlData. În această metodă, trebuie să definiți GUID-ul fabrica clasa de control ActiveX, numărul de agenți de procesare a evenimentelor și referința manualului de evenimente implementat pe client și legătura la interfața de licențiere necesară pentru apelurile metodice IClassFactory2. Metoda InitControlData se numește automat după testul constructorului TOleControl.

Creați o nouă aplicație și în secțiunea Interface declarați un nou TOleControl pentru copii:

Metodele InitControlData și EbeggAX sunt implementate după cum urmează:

Plasați butonul pe formular și creați un simplu procesator de evenimente:

Acum puteți rula aplicația creată și apăsați butonul în timpul rulării. Un control ActiveX apare în zona specificată. Prin schimbarea GUID a clasei fabrică la, puteți vedea un rezultat diferit (Figura 8).

Atât primul, cât și al doilea element de control testat aici nu au fost înregistrate în paleta de componente Delphi. Practic, în același mod, puteți accesa oricare dintre serverele COM înregistrate în registry de sistem care au cheia de registry Control în secțiunea cu GUID din fabrică. Prezența acestei secțiuni garantează suportul serverului COM al interfețelor IOleClientSite, IOleControlSite, IOleInplaceSite, necesare pentru afișarea controlului ActiveX pe client.

Mai recent, Cougar a introdus o nouă serie de surse de alimentare pentru PC-urile tradiționale - VTX, destinate utilizatorilor cu un buget limitat. În această revizuire, va fi luat în considerare modelul Cougar VTX600, care datorită caracteristicilor sale va fi unul dintre cele mai populare în această linie de surse de alimentare

La evenimentul anual Capsaicin SIGGRAPH din Los Angeles, AMD și-a consolidat poziția pe piața de PC-uri high-end cu noii procesori Ryzen Threadripper și GPU "Vega"

Pentru o construcție simplă și convenabilă a utilizatorilor obișnuiți companie de rețea ZyXEL a lansat urmatoarea versiune a platformei sale de Internet pentru conectarea la rețelele 3G / 4G prin USB-modem cu punct de acces Wi-Fi - ZyXEL Keenetic 4G III, pe care le considerăm în această recenzie

Pentru familia sa de routere și routere, ASUS a adăugat recent două modele foarte interesante: modelul 4G-AC55U și cel mai simplu 4G-N12. Acest articol va lua în considerare modelul emblematic ASUS 4G-AC55U

Young dar ambitioasa companie KREZ la inceputul acestui an a lansat un nou, model de laptop original, KREZ Ninja (modelul TM1102B32) care rulează Windows 10. Deoarece acest computer are un ecran pivotant, acesta poate servi ca o soluție universală - poate fi folosit cu succes pentru muncă, și pentru studiu și pentru jocuri

Dacă de multe ori imprimați fotografii și sunteți deja obosit să schimbați cartușele în imprimantă, acordați atenție echipamentului MFP Epson L850. O mare varietate de consumabile, o calitate excelentă a imprimării, o gamă largă de funcționalități - acestea sunt doar câteva dintre avantajele acestui model







Articole similare

Trimiteți-le prietenilor: