VII. Diel C++ - Grafické plátno a jeho funkcie

Michal Kyžňanský  /  28. 09. 2005, 00:00

Grafika je to, čo nám dovoľuje zabaliť perfektné algoritmy do krásneho a vzhľadného obalu pre užívateľa. Ale samozrejme aj vytvoriť kresliace programy, grafické softwary a všeličo iné. Možnosti sú nekonečné. Grafika dnes hýbe svetom. Poďme sa na ňu pozrieť zblízka.

Samotné C++ nemalo príliš rozmanitú podporu grafiky ( prvé verzie pre Dos a pod. ), ale C++ Builder a Dev túto podporu doviedli dostatočne ďaleko. V C++ Builderi máme veľké množstvo komponentov, ktoré dokážu zobraziť obrázky ( Image, BitButton, SpeedButton a iné ). Týmto komponentom sa budeme venovať v ďalších dieloch. Teraz si však predvedieme prácu s grafickým plátnom Canvas, ktoré poskytuje asi najvyspelejšiu prácu s 2D grafikou v C++ Builderi. Pomocou Canvas plátna si vytvoríme jednoduchý kresliaci program.

Trieda Canvas je súčasťou mnohých komponent a v C++ Builderi, slúži ako kresliaca plocha. Obsahujú ju napríklad aj formulár, Image a iné.

Ukážeme si, ako nakresliť štvorec na určité miesto. Do formulára vložíme Button a premenujeme si ho na Nakresli. Po jeho stlačení sa vykoná príkaz, ktorý nakreslí štvorec.

void __fastcall TForm1::Button1Click(TObject *Sender)
{
this->Canvas->Rectangle(45,35,190,185);
}

Namiesto this pokojne môže byť Form1, resp. meno, ktoré ste dali formuláru.
Poznáme však ešte jeden spôsob, ako inicializovať Canvas, a to priradením premennej. Aby sme nemuseli stále vypisovať Canvas->nejaký príkaz. Inicializácia je nasledovná:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TCanvas *g;
g = this->Canvas;
g->Rectangle(45,35,190,185);
}

Teraz nám už stačí vždy, keď chceme niečo nakresliť použiť formuláciu g-> a za tým príkaz na kreslenie, kruhu, štvorca atď.

Niektoré základné funkcie triedy TCanvas:

Draw( )

Vykreslí grafiku – bitmapu, ikonu a pod.

Ellipse( )

Nakreslí Kružnicu definovanú 2 bodmi

FillRect( )

Vyplní farbou ohraničený Rectangle

LineTo( )

Nakreslí priamku z aktuálnej pozície pera k zadanému bodu

MoveTo( )

Nastaví aktuálnu pozíciu pera bodmi x,y

Polygon( )

Nakreslí mnohouholník



Teraz si program na demonštráciu niektorých metód konkrétne MoveTo( ) a LineTo( ). Pôjde o program, ktorý nám pri kliknutí myšou na určitú pozíciu spojí tento bod priamkou s predchádzajúcim bodom. V tomto programe si tiež ukážeme ako funguje udalosť OnMouseDown.

Udalosti sa nachádzajú v ľavom dolnom roku, menu Object Inspector v záložke Events. Stačí poklepať dvakrát na zvolenú udalosť a hneď sa nám vyhodí ( v prípade udalosti mMouseDown ) niečo takéto:

void __fastcall TForm1::Image1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{

}

Syntax programu je takýto:

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
TCanvas *g;                        //inicializácia a priradenie plátna pointru g
g = Image1->Canvas;
g->MoveTo(50,28);            //nastavenie pozície pera, aby nebolo mimo plátna
}

//---------------------------------------------------------------------------
//udalosť kliknutie myši na určitú pozíciu obsahuje definované body X a Y, ktoré nám určujú
//presne, na akú pozíciu sme klikli


void __fastcall TForm1::Image1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
TCanvas *g;
g = Image1->Canvas;
DoubleBuffered=true;             //ide o zabezpečenie toho, aby obraz                                     
                                                //neblikal pri rýchlom klikaní, teda dvojité bufferovanie

g->LineTo(X,Y);                      //príkaz na spojenie bodu s miestom, kde sme klikli.
}



V budúcom článku si povieme viac o udalostiach, najmä čo sa týka myšacích udalostí, a vyrobíme si ďalšie kresliace programy, ktoré už budú pripomínať funkcie známe zo Skicáru.

Neprehliadnite: