Az ablak kirajzolását szükség esetén a TForm.Paint metódus meghívásával kényszerítheted, ekkor fut a TForm.FormPaint eseménykezelő. Itt is rajzolhatsz, de ahogy lassan összeállnak a részletek inkább azt javaslom kezd elölről és e programban ne legyen saját TForm.FormPaint metódusod.
A játéktér, így a háttér, a labdák, a lövedék és a többiek kirajzolását is időzített eljárásban csináld. Amit szeretnél megjeleníteni az ablakban azt a TForm.Canvas-ra kell rajzolnod (megfelelő sorrendben: háttér először). A játéktér pillanatnyi állapotának kirajzolása után kell hívnod a TForm.Paint metódust hogy az egész megjelenjen a képernyőn.
Tomi írta:
terulet := TRect.Create(0, 0, FoAblak.Width, FoAblak.Height);
Canvas.StretchDraw(terulet, hatterkep);
Nem írtad milyen "hibát ír ki"...
Hiba esetén mindig írd meg a hibaüzenetet is! Különben jó eséllyel nem tudnak segíteni akiktől ezt várod.
Ez esetben azonban biztosra veszem, hogy ez volt a hibaüzenet:
identifier idents no member "Create"
Ennek az az oka, hogy a TRect nem class (osztály), hanem record aminek nincs se Create nevű mezője se metódusa. Ez utóbbi nem is lehet neki.
Így csináld:
terulet := Rect(0, 0, Width, Height);
Canvas.StretchDraw(terulet, hatterkep);
vagy még rövidebbre véve a forráskódot, inkább így:
Canvas.StretchDraw(Rect(0, 0, Width, Height), hatterkep);
... és még valami fontos: a képeket (háttér, labda, lövedék stb.) ne akkor töltsd be amikor kirajzolod, hanem a program indításakor (Pl. Form.OnCreate eseménykezelőben), különben feleslegesen terheled a gépet.