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

Michal Kyžňanský  /  05. 10. 2005, 00:00

Dnes budeme pokračovať v spoznávaní a oboznamovaní sa s funkciami, ktoré nám ponúka grafické plátno. Vytvoríme si jednoduchý program, ktorý budú obsahovať známu funkciu zo Skicáru a iných grafických editorov.

Grafické plátno disponuje mnohými funkciami, ktoré nám môžu byť veľmi užitočné. Základným ovládacím prvkom plátna je vždy myš, či už pri kreslení, alebo úpravách obrázkov a pod. Preto si najprv povieme o udalostiach OnMouseDown, OnMouseUp, OnMouseMove. Sú to tzv. myšacie udalosti. Všetky tieto udalosti majú spoločnú jednu základnú vlastnosť, a to, že presne nám označujú miesto, kde bolo kliknuté/pohnuté/odkliknuté myškou. Každá z týchto udalostí má zadefinované dva súradnicové body X a Y, ktoré udávajú pozíciu v pixloch na formulári/grafickom plátne.

OnMouseDown – stlačenie akéhokoľvek tlačidla na myši
OnMouseUp – uvoľnenie akéhokoľvek tlačidla na myši
OnMouseMove – pohyb kurzora


Pri udalostiach týkajúcich sa myšky máme dva špeciálne parametre na zistenie, akým tlačidlom myši bola udalosť vyvolaná. Prvým parametrom je Button.

- mbLeft – ľavé tlačidlo
- mbRight - pravé tlačidlo
- mbCenter – stredné tlačidlo

Príklad:

if(Button == mbLeft)
{ ShowMessage(“stlačili ste ľavé tlačidlo tlačidlo”); }

Druhou metódou je parameter Shift, ktorý udáva stav niektorých kláves pri udalosti.  Syntax vyzerá tak, že napíšeme Shift.Contains( jeden z nižšie uvedených príkladov ).

- ssShift – stlačenie klávesy Shift
- ssAlt - stlačenie klávesy Alt
- ssCtrl - stlačenie klávesy Ctrl
- ssLeft - stlačenie ľavého tlačidla myši
- ssRight - stlačenie pravého tlačidla myši
- ssDouble - dvojklik

a iné

Príklad:

if(Shift.Contains(ssLeft) && (Shift.Contains(ssCtrl){ 
Edit1->Text = “Dobré ráno”;
}

Práve parameter Shift nám poslúži, pri tvorbe funkcie známej zo Skicáru – kreslenie štetcom.

Vytvoríme si program, ktorý nám bude umožňovať kresliť štyrmi farbami a vyberať si hrúbku čiary. Vložíme si do formulára komponentu Image, 4 komponenty Button ( budú reprezentovať jednotlivé farby ), jednu komponentu Edit a jednu komponentu UpDown. Rozmiestnenie by malo byť nasledovné.



Komponenta UpDown sa spojí s komponentou Edit resp. aby sme ovládali čísla v komponente Edit pomocou UpDown, treba nastaviť vo vlastnostiach UpDown vlastnosť Associate a v nej vybrať Edit1. Tlačidlá na formulári premenujeme tak, aby reprezentovali farby, ktoré budeme môcť používať.

Zdrojový kód aplikácie je nasledovný:

//---------------------------------------------------------------------------

#include <VCL.H>
#pragma hdrstop
TCanvas *g; //definujeme si pointer g typu TCanvas

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
g = Image1->Canvas; //inicializujeme grafickú plochu
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1Click(TObject *Sender)
{
g = Image1->Canvas; //priradenie premennej g vlastnosti Image
DoubleBuffered=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
//toto je udalosť pohyb myši
{
DoubleBuffered=true;
if(Shift.Contains(ssLeft)){ //podmienka ak je stlačené pravé tlačidlo myši
g->LineTo(X,Y); //pozícia pera je spojená s bodom so súradnicami X,Y
g->Pen->Width = Edit1->Text.ToInt(); //načítanie hrúbky pera z Edit1 ( v pixloch )
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
//toto je udalosť stlačenie tlačidla myši

{
g->MoveTo(X,Y); //pozícia pera je spojená s bodom so súradnicami X,Y
g->LineTo(X,Y); //pozícia pera je presunutá na súradnice X,Y
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
g->Pen->Color = clRed; //parameter nastavenia farby čiary
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
g->Pen->Color = clBlue;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
g->Pen->Color = clGreen;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
g->Pen->Color = clBlack;
}
//---------------------------------------------------------------------------

Celý program si môžete stiahnuť tu.


V budúcom diele ostaneme stále pri grafike a ukážeme si ďalšie fígle, a schopnosti grafického plátna.

Neprehliadnite: