HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Grafika a Delphi-ben


Canvas objektum 1. rész

Példaprogram letöltése

5937 bájt

Új sorozatunkban a Windows grafikával foglalkozunk, kezdve a TCanvas teljes körű ismertetésétől a GDI (Graphic Device Interface) függvényekig. Az így szerzett ismereteket felhasználhatjuk a saját magunk által készített vizuális komponensek, vagy képfeldolgozó programok tervezésénél és kivitelezésénél is.
A TCanvas nem más, mint egy „vászon”, amire tetszőleges képet rajzolhatunk. Amikor például egy vizuális komponenst készítünk, akkor annak képét egy TCanvas objektumban készítjük el. A standard Windows komponenseknek (pl. TEdit) nincs Canvas-uk, ezek kirajzolásáról a Windows gondoskodik.
A rajzoláshoz magában a TCanvas osztályban találhatunk rengeteg eljárást, függvényt, melyekkel a következő lehetőségeink vannak:
  • vonalakból, körívekből és görbékből álló alakzatokat hozhatunk létre;
  • beállíthatjuk a vonalvastagságot, színt, stílust, az alakzat kitöltéséhez használt mintát;
  • bitképeket jeleníthetünk meg a képen, különböző módokon;
  • szövegeket jeleníthetünk meg különböző betűtípussal.

Vonal rajzolásához a LineTo eljárást használhatjuk. Ennek csupán két paramétere van: a rajzolandó vonal végpontjának koordinátái. Felmerülhet a kérdés, hogy akkor hogyan adjuk meg a vonal kezdőpontját? A vonalat a LineTo eljárás mindig az aktuális rajzolási pozíciótól húzza. Ezt a pozíciót a MoveTo eljárással, vagy a PenPos property-n keresztül tudjuk beállítani. A MoveTo eljárás egy koordinátát vér, míg a PenPos egy TPoint típusú értéket. A rajzolási pozíció mindig az utoljára megrajzolt alakzat végpontja lesz. Ha például vonalat húzunk, akkor az új pozíció a vonal végpontjában lesz.
  MoveTo(20, 20);
  LineTo(80, 20);
  LineTo(20, 20);
A TPoint típust több alakzat megrajzolásához is használjuk majd. Erről annyit érdemes tudni, hogy egy koordinátapárt tárolhatunk benne, vagyis van egy X és egy Y mezője.

Alapesetben a bal felső pixel koordinátája (0,0), ezt viszont megváltoztathatjuk a CanvasOrientation property módosításával. Ennek a propertynek két értéke lehet:
  • coLeftToRight: a (0,0) koordináta a bal-felső sarokban van.
  • coRightToLeft: a (0,0) koordináta a jobb-felső sarokban van.

A példában egy olyan programot készítettünk, amivel egy TPaintBox komponensre vonalakat rajzolhatunk az egérrel. A TPaintBox komponens tulajdonképpen csak egy Canvas-t jelenít meg, amire kedvünk szerint rajzolhatunk. Azt azonban tudnunk kell, hogy ha a komponens területét ideiglenesen eltakarja valami, mondjuk egy másik Form, akkor az eltakart területen lévő rajz törlődik. Ez igaz abban az esetben is, ha a Form Canvas-ára rajzolunk. Ha nem szeretnénk, hogy a kép, amit rajzolunk megsérüljön ilyen esetekben, akkor azt rajzoljuk meg egy futásidőben létrehozott TCanvas objektumban, majd másoljuk át a komponens Canvas-ára, vagy a Form OnPaint eseményénél mindig frissítsük a képet.

A példaprogramban tehát vonalakat rajzolunk az egér segítségével. Az egérgomb lenyomásakor kijelöljük a vonal kezdőpontját, az egérgomb felengedésekor pedig a végpontját. A kezdőpont kijelölése után elmozgatva az egeret láthatjuk, hogy a vonalat mindig megrajzoljuk az aktuális egérpozíciónak megfelelően, az mégsem „marad” ott, és nem törli a már megrajzolt vonalakat sem. Ennek oka a Pen property Mode tulajdonságánál keresendő.Eza property az új és a már meglévő színek között egy logikai műveletet végez, és az eredményt jeleníti meg. Amikor ideiglenesen rajzoljuk meg a vonalat, akkor ezt az értékét pmNotXor-ra állítjuk. Az XOR műveletről tudhatjuk, hogy kétszer végrehajtva a műveletet ugyanazon értékekkel, a kiinduló értékekhez jutunk. Tehát ha rajzolunk egy vonalat pmXor vagy pmNotXor módban, akkor az megjelenik a képen, de ha ugyanezt a vonalat újra megrajzoljuk saját magára, akkor eltűnik. Ha ilyen módon rajzoljuk meg a vonalat, akkor viszont számoljunk azzal, hogy a vonal színe nem, vagy nem teljesen egyezik meg a Pen.Color property-ben megadott színnel.
A TrackBar komponenssel a vonalvastagságot is tudjuk állítani. A vonalvastagságot szintén a Pen property-n keresztül adhatjuk meg a Width mezőben.
  PaintBox1.Canvas.Pen.Width := 2;
A Pen property-vel és azzal együtt a TPen osztállyal a cikksorozat egy későbbi részében részletesebben is foglalkozunk.



Cikksorozat

#IDKategóriaCikk címeSorozat
1063DelphiInterbase 6 alkalmazása Delphi-ben1. rész
1072DelphiInterbase 6 alkalmazása Delphi-ben2. rész
1084DelphiInterbase 6 alkalmazása Delphi-ben3. rész
1092DelphiTIBTable komponens4. rész
1102DelphiTIBTransaction komponens5. rész
1111DelphiTIBQuery komponens6. rész
1120DelphiTIBStoredProc komponens7. rész
1128DelphiTIBDataSet komponens8. rész
1141DelphiTIBSQL komponens9. rész
1150DelphiTIBSQLMonitor komponens10. rész
1159DelphiTIBUpdateSQL komponens11. rész
1167DelphiIBEvents komponens12. rész
1177DelphiIBDatabaseInfo komponens használata13. rész
1183DelphiTIBConfigService komponens14. rész
1192DelphiTIBSecurityService komponens15. rész
1204DelphiTIBServerProperties komponens16. rész
1213DelphiTIBBackupService komponens17. rész
1222DelphiTIBRestoreService komponens18. rész
1231DelphiTIBValidationService komponens19. rész
1240DelphiTIBStatisticalService komponens20. rész
1249DelphiTIBLogService komponens21. rész
1258DelphiTIBUninstall komponens22. rész
1267DelphiInterBase Express komponenscsomag23. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2001 évkönyv 473. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |