Grafica din Delfi

Lucrul cu grafica din Delphi nu este doar linii și cifre, dar și documente de tip text și de imprimare. Prin urmare, în lucrul cu grafica Delphi ar trebui să aibă un pic de timp. Lucrul cu elemente grafice din Delphi implică un apel la panza - componente de proprietate Canvas. Canvas Delphi este o pânză care permite programatorului să aibă acces la fiecare punct (pixel), iar în cazul în care artistul pentru a afișa ceea ce doriți. Desigur, trage pixel cu pixel pentru grafica din Delphi nu este necesar, sistemul Delphi oferă instrumente puternice pentru lucrul cu grafica. facilita sarcina programatorului.







Desigur, nu toate componentele din Delphi au aceste proprietăți. În fila suplimentară este o TImage componentă specializată. special concepute pentru pictura, dar, de asemenea, au proprietatea de Canvas, de exemplu, componente, cum ar fi ListBox, ComboBox, StringGrid, precum și însăși forma care plasează componentele noastre! În plus, Delphi pentru imprimarea documentelor se referă la proprietatea obiectului Canvas, cum ar fi o imprimantă.

Proprietatea principală a unui astfel de obiect ca panza Delphi - Pixels [i, j] tip TColor. adică, o matrice bidimensională de puncte (pixeli) definite prin culoarea sa. Bazându-se pe panza are loc atunci când atribuirea oricărui punct de culoare dat de panza. Fiecare pixel poate fi atribuit orice culoare pentru Windows disponibile. De exemplu, afirmația este

roșu de plumb pentru trasarea unui punct cu coordonate [100, 100]. Aflați mai multe culori pixel poate inversa asignarea:

Type TColor definit ca un întreg lung (LongInt). Cele patru octeți conțin informații despre proporțiile albastru (B), verde (G) și culori (R) de culoare roșie. În sistemul de 16-ary, se pare ca acest lucru: $ 00BBGGRR. Proporția de fiecare culoare poate varia de la 0 la 255. Prin urmare, pentru a afișa punctul cel mai roșu, este necesar să se atribuie o culoare $ 000000FF.
Pentru culori standard în Delphi definit un set de constante de text. Acesta poate fi văzut prin deschiderea obiectului proprietății inspector de culoare, de exemplu, aceeași formă.

Tabelul următor listează unele dintre proprietățile și metodele de panza:

Procedura TextOut (X, Y: Integer; Text const: WideString);
Textul produce linie de ieșire pornind de la (X, Y) - pixelului din stânga sus a textului.

proprietate textwidth (var Text: String): Integer;
Cu un conținut de lungime șir de text în pixeli.

proprietate TextHeight (var Text: String): Integer;
Cu un conținut de text înălțimea liniei în pixeli.

FillRect Procedura (const Rect: TRect);
RECT Umple un dreptunghi pe panza folosind peria curentă. Acesta poate fi folosit, inclusiv, pentru ștergerea imaginii de pe panza.








Scrie, folosind doar metodele de panza, o aplicație imagine de pe componenta panza textul din imagine, care este introdus în componenta Memo:

Poziția pe componentele forma Memo imagine (localizată pe pagina suplimentară), Editare, UpDown (localizat pe pagina Win32). Asociat UpDown proprietate componentă Echivala în lista verticală Editare noastre componente. Această componentă vom schimba dimensiunea fontului. Deoarece ambele Memo si Image suntem pe aceeași dispozitiv de ieșire - pe ecranul nostru, dimensiunea pixelilor au aceleași, și, prin urmare, dimensiunea imaginii va fi egală.

Grafica din Delfi

Primul lucru pe care îl facem este inițializa variabilele la începutul programului. Este necesar să se determine dimensiunea zonei de desen (acest lucru va crea o variabilă de tip la nivel mondial Dreptunghi TRect) și de a face culoarea de fundal alb Imagine:

Procedura TForm1.FormCreate (Expeditor: TObject);
începe
Rect.Left: = 0;
Rect.Top:=0;
Rect.Right: = Image1.Width;
Rect.Bottom: = Image1.Height;
Image1.Canvas.Brush.Color: = clWhite;
se încheie;

Apoi desena un cadru în jurul valorii de părțile laterale ale imaginii:

Procedura TForm1.page;
începe
cu Image1.Canvas do
începe
MoveTo (0, 0);
LineTo (Image1.Width-1, 0);
LineTo (Image1.Width-1, Image1.Height-1);
LineTo (0, Image1.Height-1);
LineTo (0, 0);
se încheie;
se încheie;

Să încercăm asta. Totul funcționează, dar rama nu este încă afișată. Deci, vom adăuga o procedură de pagină în procedura FormCreate. Acum frumos. Apoi, a scrie o procedură simplă ștergere de purificare de imagine. Acesta trebuie să fie numit înainte de orice reînnoire a imaginii, în caz contrar imaginile anterioare și ulterioare se vor suprapune.

Procedura TForm1.clearing;
începe
Image1.Canvas.FillRect (Rect); // Rect dreptunghi umplut cu alb, imaginea este ștearsă.
se încheie;

Acum a venit rândul procedurii directe de text. Textul de afișare începe de la punctul (3, 3) - colțul din stânga sus al foii cu o adâncitură mică 3 în pixel. Fiecare linie ulterioară se va deplasa la înălțimea unui rând:

Procedura TForm1.prn;
var i: Integer;
începe
cu Image1.Canvas do
pentru i: = 1 la Memo1.Lines.Count do
TextOut (3, 3+ (i-1) * TextHeight ( 'A'), Memo1.Lines [i-1]);
se încheie;

Acum totul este gata pentru producția de text. Făcând acest eveniment va onchange:

Procedura TForm1.Memo1Change (Expeditor: TObject);
începe
de compensare;
PRN;
pagină;
se încheie;

Și, în sfârșit, cum se schimba dimensiunea fontului:

Procedura TForm1.Edit1Change (Expeditor: TObject);
începe
Memo1.Font.Size: = UpDown1.Position;
Image1.Canvas.Font.Size: = UpDown1.Position;
Memo1Change (Sender);
se încheie;

Puteți modifica acest program pentru textul de ieșire care urmează să fie imprimat. Pentru a lucra cu imprimanta trebuie să fie conectată modulul de imprimante:

utilizări
Ferestre, Mesaje, SysUtils, variante, Clase, grafică, controale, Formulare,
Dialoguri, StdCtrls, imprimante;

Când utilizați imprimanta cu atât lama pentru a începe metoda numită BeginDoc de imprimare. apoi a produs un document de ieșire, imprimarea este finalizată prin apelarea metodei EndDoc:

Printer.BeginDoc;
cu Printer.Canvas do
începe
. Imprimarea unui document.
se încheie;
Printer.EndDoc;

Lățimea și înălțimea imprimantei sunt disponibile prin proprietățile de material textil și Printer.PageWidth Printer.PageHeight. După imprimarea pe aceeași pagină și începe imprimarea pe de altă parte, puteți utiliza metoda Printer.NewPage.