eit2_l9.pdf

(119 KB) Pobierz
Microsoft Word - eit2_l9.doc
Językiprogramowania
Laboratorium9–Buforowanie obrazu
1
1.Prostaanimacja
PobierzkomponentTTimerzzakładkiSystem
WdeklaracjiklasyTFormstwórzzmienne intPx i intPy
//
classTForm1:publicTForm
{
__published://IDEmanagedComponents
TTimer*Timer1;
void__fastcallTimer1Timer(TObject*Sender);
private: //Userdeclarations
public: //Userdeclarations
__fastcallTForm1(TComponent*Owner);
intPx;
intPy;
};
//
WObject InspectorustawwłaściwośćIntervalna1(ms)
Wkonstruktorzeformatkiwyzerujzmienne
//
__fastcallTForm1::TForm1(TComponent*Owner)
:TForm(Owner)
{
Px=0;
Py=0;
}
//
DanielKról–PWSZTarnów
170470821.014.png 170470821.015.png 170470821.016.png 170470821.017.png 170470821.001.png 170470821.002.png 170470821.003.png
Językiprogramowania
Laboratorium9–Buforowanie obrazu
2
PodwójnymkliknięciemwkomponentTimer1wygenerujzdarzenieiwpiszkod:
//
void __fastcallTForm1::Timer1Timer(TObject*Sender)
{
Canvas>Brush>Color=clWhite;
Canvas>Pen>Color=clWhite;
Canvas>Rectangle(0,0,400,300);
Canvas>Brush>Color=clRed;
Canvas>Pen>Color=clRed;
Canvas>Ellipse(Px50,Py50,Px+50,Py+50);
Px++;
Py++;
if(Px>400)
Px=0;
if(Py>300)
Py=0;
}
//
Uruchomaplikacje.ZauwaŜzeobraz„migocze”.
2.Animacjazbuforowaniemobrazu
WdeklaracjiklasyTFormstwórzwskaźnikitypuTPictureiTCanvas
//
classTForm1:publicTForm
{
__published://IDEmanagedComponents
TTimer*Timer1;
void__fastcallTimer1Timer(TObject*Sender);
private: //Userdeclarations
public: //Userdeclarations
__fastcallTForm1(TComponent*Owner);
intPx;
intPy;
TPicture*Buffer;
TCanvas*BCanvas;
};
//
Wkonstruktorzeformatkidopisznastępującykod:
//
__fastcallTForm1::TForm1(TComponent*Owner)
:TForm(Owner)
{
Px=0;
Py=0;
Buffer=newTPicture(); //TworzenieobiektuTPicture
Buffer>Bitmap>Width=400; //SzerokośćBitmapywpamięci
Buffer>Bitmap>Height=300; //WysokośćBitmapywpamięci
BCanvas=Buffer>Bitmap>Canvas;
}
//
DanielKról–PWSZTarnów
170470821.004.png 170470821.005.png 170470821.006.png 170470821.007.png 170470821.008.png
Językiprogramowania
Laboratorium9–Buforowanie obrazu
3
WzdarzeniuOnClose()formatkiusuńobiektwskazywanyprzezwskaźnikBuffer
//
void __fastcallTForm1::FormClose(TObject*Sender,TCloseAction&Action)
{
deleteBuffer;
}
//
ZmodyfikujkodwzdarzeniuTimerazamieniającwskaźnikCanvasrysującypoformatcena
wskaźnik BCanvas rysujący w pamięci. Funkcja CopyRect kopiuje obraz z pamięci na
formatkę.
//
void __fastcallTForm1::Timer1Timer(TObject*Sender)
{
BCanvas>Brush>Color=clWhite;
BCanvas>Pen>Color=clWhite;
BCanvas>Rectangle(0,0,400,300);
BCanvas>Brush>Color=clRed;
BCanvas>Pen>Color=clRed;
BCanvas>Ellipse(Px50,Py50,Px+50,Py+50);
Px++;
Py++;
if(Px>400)
Px=0;
if(Py>300)
Py=0;
Canvas>CopyRect(Rect(0,0,400,300),BCanvas,Rect(0,0,400,300));
}
//
Uruchomaplikacjeizwróćuwagęzeobrazprzestał„migotać”.
3.Zadanie
Zmodyfikuj program tak aby animacja była rysowana na całej powierzchni formatki
niezaleŜnieodjejrozmiaru.Wykorzystajzdarzenie OnCanResize()i OnPaint(),pamiętając
abyzmieniaćrównieŜrozmiarbitmapywpamięci.
DanielKról–PWSZTarnów
170470821.009.png 170470821.010.png 170470821.011.png 170470821.012.png 170470821.013.png
Zgłoś jeśli naruszono regulamin