Baze componente de mediu creație în delphi

Delphi. Componente și clase. Crearea unei componente

Baze componente de mediu creație în Delphi

Clasa de cuvinte cheie indică faptul că suntem creați o nouă clasă TMyClass, generându-l de la un părinte - TCustomControl.

În general, câmpul - este variabilele normale, încapsulate în interiorul obiectului. Ele sunt declarate în același mod ca și într-un Pascal conventional (a se vedea exemplul de mai jos, FSTR - Câmpul Type String). Domenii pot fi, de asemenea obiecte.

Aceasta este una dintre cele mai importante părți ale obiectului. Metodele furnizează un fel de interfață între interior parte (încapsulată) a obiectului și exterior (accesibil în afara amplasamentului). Declarată precum și funcțiile și procedurile în obicei Pascal. Aici este un exemplu simplu:

Acest exemplu ilustrează, de asemenea, bine esența încapsulare. clasa TMyClass încapsulează domeniu FSTR și punerea în aplicare a metodelor de înregistrare - SetStr și citire - getstr acest domeniu.

Pentru a acoperi metode de clasă strămoș într-o clasă descendent, o directivă specială suprascriere. Atunci când suprapunerea metodă trebuie să ia în considerare următoarele: o metodă declarată în clasa strămoș în cluburi private, nu poți bloca în copil; Nu puteți acoperi, de asemenea, metodele, declarându-i să fie în copilul cu mai puțină vizibilitate decât în ​​clasa strămoșul; datorită suprapunerii metodelor de procesare a mesajelor suprascrie directiva nu este utilizat. Pentru ca organismul metoda de suprapunere pentru a aplica metoda unui strămoș, folosind directiva moștenită. exemplu:

Metode virtuale și dinamice

Metodele pot fi virtuale sau dinamic. Acestea diferă în modul în care soluția problemei clasice de „timp - o resursă, o resursă - Timpul“ (în acest caz, resursa - este cantitatea de memorie RAM).

Diferența dintre ele constă în structura tabelelor respective metode VMT - Virtual Metod (tabel metoda virtuală) și DMT - dinamic Metod (tabel metode dinamice). Dispecerizare metodă virtuală este mai rapid decât dinamic, dar pe de altă parte, tabelul de metoda virtuală (VMT) ocupă mai mult spațiu în memorie decât tabelul dinamic (DMT). Alegerea este de până la programator.

Metode de manipulare Mesaj

Constantă Mesajul după ce directiva specifică mesajul care urmează să fie prelucrate prin această metodă (în acest caz, metoda va fi numit de fiecare dată când mișcarea cursorului mouse-ului apare pe acel obiect). Tipul cu un singur parametru specifică procedurile, mesajele de date (de exemplu, în acest caz Msg.XPos și Msg.YPos - coordonatele curente ale cursorului mouse-ului în componenta) vor fi transmise în orice metodă de format. Descriere constante și tipurile corespunzătoare plasate în unitatea de Mesaje.

Metode de clasă (sau metode de clasă)

Pereregruzhaemye (suprasarcină) Metode

Și, în sfârșit, este necesar să se discute metodele supraîncărcate. Ele oferă posibilitatea de a interacționa mai flexibil cu obiectul. Acest lucru se realizează datorită faptului că pot exista mai multe metode diferite, cu același identificator, dar diferiți parametri. Au anunțat că folosesc o directivă specială - suprasarcină.

În acest exemplu, atunci când un utilizator apelează metoda SETX, în funcție de parametrul trecut se numește metoda corespunzătoare (pentru parametrul de tip String - primul Integer - a doua).

Exemplu de apel al primului exemplu de realizare a metodei:

Exemplu de apel al unui al doilea exemplu de realizare a metodei:

Facilități oferite de această oportunitate, evident, de exemplu, în acest caz, utilizatorul nu are nevoie pentru a converti Integer la String.

Constructori și destructori

Constructori și destructori sunt folosite pentru a crea o clasă și a elimina o instanță. Constructorul alocă memoria necesară, inițializează domenii, produce facilitatea de formare inițială pentru utilizare ulterioară. Constructorul este declarat cu constructorul și directivele trebuie să fie numit - Creare. În corpul constructorului este primul pas este de a apela constructorul părintelui. Distrugător eliberează proiectantul de memorie alocată, se referă la fișierele utilizate, cursuri de apă, și așa mai departe. D. destructor este declarată cu directiva destructor, ar trebui să fie numit Destroy. In corpul destructor destructor este numit un strămoș în ultimul rând. exemplu:

Properties - este al doilea cel mai important mijloc (după practici) de a asigura interacțiunea obiectului cu lumea exterioară. După proprietate oferă acces la domeniile proprietăților obiectelor pot fi văzute doar în obiectele inspector (Object Inspector) Delphi.

StrCount proprietate: Integer citește GetStrCount; - read-only (read-only)
StrCount proprietate: Integer scrie SetStrCount; - numai scriere de proprietate (write-only).

Aplicarea metodelor de citire și scriere contribuie adesea la așa-numitul efect secundar. Aceasta este o situație în care, atunci când valoarea proprietăților necesare pentru a face în continuare orice modificări. De exemplu, atunci când schimbă înălțimea sau lățimea pentru orice obiect vizual acolo va fi redesenată, și se schimbă dimensiunea acesteia. Metodele de înregistrare sunt adesea folosite pentru a verifica valoarea atribuită unei proprietăți cu privire la admisibilitatea.

Acum ne uităm la modul de organizare a proprietății, oferind acces direct la elementele de matrice - linii pentru exemplul anterior. Pentru a face acest lucru, asigurați-vă că pentru a citi și scrie prin metoda adecvată pentru a produce, adăugând în descrierea unui parametru - indicele, și a stabilit tipul de index pentru proprietatea în sine. În practică, se pare ca acest lucru:

tip index poate fi diferit, cum ar fi un șir de caractere.

Aceste proprietăți trebuie să fie tratate ca matrice, de exemplu, de exemplu, clasa de test TMyClass - Test.Str [5].

După cum se poate observa din acest exemplu, în cazul în care indicele este definit o proprietate, nu este necesar să se utilizeze o metodă care acceptă indexare pentru citire sau scriere. citire și scriere metoda ca un index (parametru Index, dacă au) pentru fiecare proprietate va fi transferat la valoarea pe care este specificată după directiva index. Dar, în corpul metodei în conformitate cu valoarea obținută a indicelui vom afla care dintre proprietățile tratamentului a fost efectuat, și să ia măsurile corespunzătoare.

Umbre proprietatea este foarte simplu, vom lua tac nostru dintr-o serie de șiruri:

Această directivă este utilizată pentru a specifica valorile implicite pentru proprietățile. În practică, după cum urmează:

Tipul de proprietate trebuie să se potrivească cu tipul de valoare care specifică atunci când default'a.

Cu această directivă referitoare la o concepție greșită comună - mulți cred că aceasta poate ajuta să inițieze valori de proprietate. Acest lucru nu este adevărat. Faptul că toate valorile de proprietate stabilite de programator pentru un obiect specific în Object Inspector sunt stocate într-un fișier de formă (.dfm), care este apoi compilat cu codul. Când executați aplicația creează în mod automat obiectele definite în faza de proiectare, și acestea sunt încărcate și valorile de proprietate stabilite. Nu este profitabil în primul rând, deoarece mărește dimensiunea fișierului exe compilate, și în al doilea rând, totul a petrecut o parte echitabilă din momentul în care aplicația pornește.

Setați valorile implicite pe care le puteți scăpa de aceste inconveniente. De exemplu, în cazul în care valoarea specificată ca valoare implicită coincide cu valoarea stabilită de programator în faza de proiectare, această valoare nu este stocată într-un fișier formă, și apoi, respectiv, la pornire nu se va încărca aplicația. Dar implicite de sarcini nu ne scutește de inițializarea câmpul corespunzător. Acest lucru ar trebui să fie făcut în constructor, și astfel încât valoarea câmpului pentru a coincide cu valoarea implicită setată pentru proprietățile respective.

Pentru a anula valorile implicite definite în clasa strămoș, trebuie să redeclare proprietatea folosind directivele nodefaul, de exemplu:

Pentru a modifica valorile implicite trebuie să preobyavit proprietatea și utilizând directiva implicită pentru a specifica o nouă valoare implicită, de exemplu:

Pe o astfel de proprietate se poate face referire, fără a specifica numele său, cum ar fi instanta clasei MyClass TMyClass - Clasa_Mea [10] echivalent MyClass.Str [10].

Această directivă este destinată pentru a determina un hard - pentru a păstra valoarea proprietății sub forma unui fișier sau nu. Se adaugă la sfârșitul determinării unei proprietăți, iar după aceea trebuie să vină fie boolean (boolean - FALSE sau TRUE) o valoare sau o funcție care returnează o valoare boolean, sau câmp boolean. Dacă Boolean adevărat (TRUE), conservarea valorilor de proprietate are loc în cazul în care FALSE (FALSE) - nr. Acest mecanism poate fi util în cazul în care există câmpuri de redundanță și proprietățile lor respective. utilizarea în comun posibilă a directivelor și implicit stocate. Exemplu (preluat din Comenzi modul)

Evenimente - aceasta este singura modalitate de a se opune de a provoca orice acțiune externă, ca răspuns la o modificare a statutului său.

Evenimentul ca o proprietate

În Delphi, toate evenimentele sunt puse în aplicare ca proprietăți ale unui anumit tip. trebuie să fie pre-definite de acest tip. Aici este definiția cea mai comună în proprietăți Delphi:

După cum se poate observa, este o procedură comună (poate fi utilizat de asemenea și funcția) cu adăugarea directivelor de obiect.

Chemat mesajul referindu-se la rubrica corespunzătoare ca o procedură sau o funcție. Pentru exemplul anterior ar arata astfel:

Înainte de a apela la eveniment asigurați-vă că pentru a verifica dacă există un handler pentru acest eveniment - acest lucru se face prin utilizarea funcției alocate. Dacă nu, în absența handler obține o eroare de execuție, accesul de memorie. Auto - în interiorul clădirii - un pointer la sine, pe care le trece ca un parametru la expeditor.

Reguli de denumire convenționale

În cele din urmă este în valoare de spus despre regulile general acceptate de numire clase și componente ale acestora:

  • numele trebuie să fie clar, ceea ce este clasa, metoda, câmp, sau proprietatea;
  • numele clasei este numit T, în funcție de tipul;
  • la numele este uneori adăugat la inițialele componentei dezvoltator sau o parte din numele companiei. Vasya Ivanov, acesta poate fi - TviComponent;
  • numele câmpurilor se obișnuiește să se înceapă cu F, din câmp (regiunea domeniu);
  • proprietăți numite exact la fel ca și câmpul (în cazul în care proprietatea este plasat în câmpul linie), omițând F. Câmpul FSTR - Str proprietate;
  • nume de citire și scriere metode de formular acceptate prin adăugarea la numele proprietății Get și Set, respectiv. Proprietatea Str - citește metoda getstr, metoda de înregistrare SetStr;
  • Denumirea câmpurilor și evenimente pentru metodele de citire și scriere sunt supuse acelorași reguli ca și pentru proprietățile;
  • nume de evenimente obișnuiește să se înceapă cu On: OnClick, onmousemove.

Pentru a instala clasa creată în paleta de componente, «Componenta» meniu, selectați elementul «Install Component ...». În fereastra care apare, introduceți următoarele valori: Unitate de fișier (numele modulului, care conține descrierea clasei instalat), calea de căutare (calea prin „;“ pe care Delphi va căuta modulul specificat), numele de fișier pachet (calea și numele de fișier batch, care va fi adăugat la modulul cu descrierea de clasă ați instalat).

În descrierea metodelor supraîncărcate în loc să suprasarcină scrise peste tot suprascriere.