4.2 Afișarea grafică pe panza Canvas
Canvas Canvas nu este o componentă, astfel încât, strict vorbind, nu ar trebui să fie considerate ca făcând parte din această carte. Dar, din moment ce multe dintre componentele, în special, în formă, pânză și panza oferă posibilitatea de a afișa o varietate de informații grafice, unele date inițiale pe panza este încă recomandabil să se dea.
Canvas reprezintă suprafața componentei, care poate fi vopsit sau terminat de afișare a imaginii. Acesta conține proprietăți și metode care simplifică foarte mult programul Delphi. Toate interacțiunile complexe cu sistem sunt ascunse pentru utilizator, astfel încât vopseaua în Delphi poate un om, acesta nu este versat în grafica pe calculator.
Fiecare punct din panza are coordonatele X și sistemul de pânză, ca și în altă parte în Delphi Y. Coordonata, un început la stânga colțul de sus al pânzei. X coordonate crește pe măsură ce trece de la stânga la dreapta, iar Y coordonatei - vă mutați de sus în jos. Coordonatele sunt măsurate în pixeli. Pixelul - este cel mai mic element al suprafeței de desen, care pot fi manipulate. Cea mai importantă proprietate a unui pixel - este culoarea.
Canvas are proprietatea Pixels. Această proprietate este o matrice bidimensională, care este responsabil pentru culoarea panza. De exemplu, Canvas.Pixels [10,20] se potrivește cu culoarea pixelului din stânga 10 și 20 din partea de sus. Cu o matrice de pixeli pot fi tratate ca orice proprietate care schimba culoarea specificând o nouă valoare în pixeli, sau pentru a determina valoarea de culoare stocată în acesta. De exemplu, Canvas.Pixels [10,20]: = 0 sau Canvas.Pixels [10,20]: = clBlack - pixel de referință este negru.
Pixelii proprietate poate fi folosit pentru a picta pe pânză. Să încercăm să atragă o curbă sinusoidală de pixeli pe panza formularului. Pentru a face acest lucru, de tratare a evenimentelor forma OnPaint (desen), aveți posibilitatea să inserați următorul cod:
Efectuați această aplicație de testare și veți vedea rezultatul este prezentat în Fig. Și 4.1. Program de undă sinusoidală dovedit, deși nu foarte bun, pentru că Acesta este împărțit în puncte individuale - pixeli.
Fig. 4.1
Programarea unei sinusoida construite din pixeli (a) și (b) linii
Canvas „/> proprietate stil determină tipul de linie Această proprietate poate lua următoarele valori .:
Linia solidă, dar Lățime> 1 poate fi colorat, paleta non Windows
In panza se PenPos tip de proprietate TPoint (cm.). Această proprietate determină coordonatele Pânză în poziția curentă a pen-ului. Mutarea pen-ul fără a trage o linie, și anume, schimba PenPos. produs de panza MoveTo (X, Y). Aici, (X, Y) - coordonatele punctelor în care se mută pen. Acest curent devine punctul de plecare pentru a trasa o linie la punctul cu coordonatele (X, Y) prin LineTo (X, Y). În acest caz, punctul curent este mutat la punctul final al liniei, iar noul apel va efectua punctul LineTo din nou punctul curent.
Să încercăm să atragă un grafic al stiloului sine din exemplul anterior. În acest caz, de tratare a evenimentelor OnPaint forme pot fi:
Rezultatul aplicării în această versiune puteți vedea în Fig. 4.1 b. După cum puteți vedea, calitatea grafică a îmbunătățit în mod semnificativ.
Pen poate desena nu numai linii drepte, dar, de asemenea, forma. Lista completă a metodelor de panza folosind pen-ul, a se vedea. Built-in Delphi ajutor. Între timp, ca un exemplu, vom prezenta doar unul dintre ei - elipsă. care atrage o elipsă sau un cerc. Acesta este declarat ca unde X1 parametri, X2, Y1, Y2 definesc coordonatele dreptunghi circumscriere elipsă sau un cerc. De exemplu, operatorul trage un cerc cu un diametru de 10 și centrul de coordonate (15, 45).
Cifrele nu sunt desenate goale, în general, și de umplut utilizând proprietatea Pensulei panza - Perie. Perie proprietate este un obiect care are, la rândul său, un număr de proprietăți. proprietate de culoare determină culoarea de umplere. proprietate Style determină modelul de umplere (umbrire). Valoarea implicită este Stil bsSolid. ceea ce înseamnă că periajul continuă culoare.
Acest mod pmNotXor caracteristică poate fi folosit pentru a crea animații simple. Suficient pentru a desena ceva, apoi va șterge trase, redesenat ușor modificat - și imaginea va fi prezentat reînviat.
Astfel vă introduceți variabilele globale X și Y - coordonatele imaginii curente.
În cazul declarațiilor insert formă OnPaint
Primul dintre acești operatori definește o culoare albă de perie. Deci, cercul va fi tras de culoare albă. Al doilea operator setează culoarea de fond a suprafeței albe a matriței. A treia declarație stabilește modul stilou pmNotXor. care vă va permite să ștergeți vechea imagine înainte de vopsire nou.
Chiar și animație cea mai simplă necesită sincronizare. În caz contrar, viteza va fi determinată de viteza computerului. Prin urmare, se transferă forma Timer componente - timer-ul cu pagina System. Această componentă este descrisă în secțiunea 5.7. Puteți vedea există o descriere detaliată. Între timp, setați proprietatea Interval, de exemplu, 30 (de data aceasta locui, în milisecunde, dar timpul efectiv de expunere va fi mai mare. - a se vedea secțiunea 5.7) și setați proprietatea Enabled la false (acest lucru înseamnă că timer-ul nu va porni automat atunci când aplicația pornește ).
În caz de tratare a operatorilor de inserție componenta OnTimer
Primul dintre acești operatori desenează un cerc în punctul în care a fost vopsit în prealabil, și anume șterge imaginea anterioară. incrementat în continuare Inc funcție a curentului de coordonate X și imaginea unui cerc este desenată în noua poziție. Ultimul operator oprește imaginea la marginea formei.
Acum trageți forma butonului buton și pe handler pe ea a pus operatori
Primele două declarații a stabilit coordonatele inițiale ale cercului. A treia declarație atrage un cerc în poziția sa inițială, iar al patrulea - pornește cronometrul.
Va difuza aplicația, rulați-l, faceți clic pe butonul. Vei vedea o imagine a cercului, muta formularul de la stânga la dreapta. Și apoi de asemenea, conectați-vă imaginația și de a converti nu este prea aplicație interesantă în ceva mai interesant.
Pe panza puteți afișa nu numai imaginea software-ul creat, dar datele de imagine stocate în fișierul de imagine. Numai ea nu schiță metode utilizate pentru a descărca fișierul. Prin urmare, este necesar să descărcați fișierul în orice alt obiect grafic care poate recepționa informația de fișiere imagine. Și apoi rescrie imaginea obiectului pe panza folosind metoda panza Draw. Descrierea lui:
Aici, parametrii coordonatele x și y definesc colțul din stânga sus al imaginii plasate pe pânză, un grafic - un obiect care deține informații. B poate fi, de exemplu, un obiect, cum ar fi un obiect de tip TBitMap. pentru stocarea de matrici de biți. Să vedem cum arată în practică.
Deschideți noua aplicație, trageți forma componentei cu pagina Dialoguri OpenPictureDialog (o componentă a fișierelor imagine de deschidere de dialog - vezi secțiunea 8.2.) Și un buton. OpenPictureDialog loc oriunde în formă, deoarece această componentă non-vizual, și așezați butonul din partea de jos a formularului. În handler clic pentru buton, programul codul:
Acest cod creează un tip de obiect TBitMap temporar numit Bitmap. Apoi numește deschis OpenPictureDialog1 de dialog fișier grafic și, în cazul în care utilizatorul selectează un fișier, acesta este încărcat în metoda Bitmap LoadFromFile. Metoda apoi imaginea descărcată este copiată pe pânză în regiune Desenați, cu coordonatele colțul din stânga sus (10, 10). După acest timp, obiectul este distrus Bitmap.
Porniți aplicația și faceți clic pe butonul său. Veți găsi că puteți încărca tip .bmp orice fișier de imagine, și apare pe panza formularului (vezi. Fig. 4.2 a). Fișierele de imagine pot fi găsite în dosarul Imagini. Delphi 5 și 4, acesta este de obicei localizat în directorul. \ Program Files \ Common Files \ Borland Shared. În Delphi 3, se află în directorul. \ Program Files \ Borland \ Delphi 3 și Delphi 1 - Delphi in catalog 16. Imaginile catalog are, în special, sub-directorul \ Images \ Splash \ 16Color \, în cazul în care este stocat fișierul, încărcat în exemplul din fig. 4.2.
Imaginea de pe panza fișierului imagine (e) și de ștergere (b) din cauza suprapunerii cu o altă fereastră
Tu „/> Puteți vedea că, dacă fereastra de orice altă fereastră aplicație se închide la momentul cererii dumneavoastră, imaginea este pictat pe panza forma se deteriorează. Să vedem cum puteți elimina acest dezavantaj.
Dacă fereastra a fost blocat și imaginea este deteriorat, sistemul de operare informează aplicația că mediul care a schimbat și că cererea ar trebui să ia măsurile corespunzătoare. De îndată ce necesitatea de a actualiza ferestre OnPaint eveniment este generat pentru ea. Handler acestui eveniment (în acest caz, evenimentele form) trebuie să redesena imaginea.
Faceți acest lucru și veți vedea că imaginea pe formular nu se deteriorează în orice plafoane ferestre.
Metoda de copii specificat regiunea de imagine parametrul sursă în sursa de imagine panza panza in regiunea menționată a parametrului panza dest. tip TRect. care caracterizează zona dreptunghiulară Source și dest. Am fost deja descrise în secțiunea 3.2. De exemplu, copiile operatorului de forma schiță în domeniul imaginii MyRect2 MyRect1 componentă panza Bitmap.
Aceste fapte de bază despre retragerea informațiilor grafice pe contur ne vom limita. În secțiunea 3.2 au fost raportate informații privind retragerea textului pe pânză. În linii generale - un obiect complex are mai multe proprietăți și metode. Dar acest lucru necesită o discuție pe scară largă, care depășește domeniul de aplicare al acestei cărți. În următoarea carte a seriei „Totul despre Delphi» Aceste întrebări vor fi discutate în detaliu.