HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Háttérminta megjelenítése komponensekben


Példaprogram letöltése

37522 bájt

A programunk felületét barátságosabbá tehetjük, ha a Form, vagy a nagyobb felületű komponensek hátterét egy mintával töltjük fel. Persze ilyenkor nem érdemes nagyon színes képet alkalmazni, hanem csak egy halvány árnyalatút, ráadásul olyat, ami színben passzol az éppen beállított Windows színekhez. Az ebben a példában készítendő komponenssel mindez nagyon egyszerűvé válik, mivel csak meg kell adni azt a komponenst, amit a háttérmintával el kell látni, valamint magát a képet. Egy kapcsolóval még azt is megadhatjuk, hogy a háttérminta színét a Windows színeihez igazítsa.

A mellékelt példaprogram megnyitása előtt a *.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot
A komponenst a TComponent osztályból származtatjuk, az új osztály neve pedig TTexturizer lesz. A Texture property-ben kell megadni azt a képet, amit a komponens vagy Form hátterébe szeretnénk helyezni. A kép mozaikszerűen lesz megjelenítve, tehát megadhatunk a komponens kliens területénél kisebb képet is. A WinControl property-ben kell megadnunk azt a komponenst, amelynek hátterét az adott mintával szeretnénk feltölteni. Sajnos nem használható minden komponensnél, de például a PageControl komponens TabSheet oldalain, vagy akár magán a Form-on igen. Az AdjustSystemColor property-ben állíthatjuk be, hogy a kép színeit a Windows színeihez igazítsa-e. Ehhez tartozik a BaseColor property, amelyben a kép alapszínét kell megadni (lásd lejjebb).
A rajzoláshoz a WinControl property-ben megadott komponens WM_ERASEBKGND üzenetét használjuk fel, ezt kapja ugyanis a komponens (vagy Form), amikor a hátteret törölni kell. Amikor ezt az üzenetet megkapja, akkor meghívjuk a Texturize eljárást, ami „kitapétázza” a komponens kliens területét a megadott képpel. Ehhez szükség van a komponens Canvas-ának leírójára, de ezt megkapjuk, ha a TMessage paramétert konvertáljuk TWMEraseBkgnd-re, és kiolvassuk ennek DC mezőjét.
A tapétázás kétféleképpen történhet. Vagy a Texture property-ben megadott képet használjuk, vagy pedig az FAdjustBmp objektumot. Ez utóbbit akkor hozzuk létre, amikor az AdjustSystemColor property igaz értéket kap, vagy a BaseColor property értéke megváltozik. Az FAdjustBmp objektum fogja tartalmazni a Windows színekhez igazított képet. Ez a következőképpen történik: megadunk egy színt, amelyet a Windows clBtnFace színének feleltetünk meg, ez lesz a kép alapszíne (BaseColor). Ezután az összes pixel színét úgy módosítjuk, hogy a BaseColor színű pixelek színe clBtnFace lesz, az összes többi pedig ennek arányában fog változni. Ha egy olyan képet adunk meg, ami szürkeárnyalatos, és az alapszíne például clSilver ($C0C0C0), akkor a kép összes pixelének színe a clBtnFace szín világosabb, vagy sötétebb árnyalata lesz.
Ennél a képnél az AdjustSystemColor property értéke igaz. A háttérkép szürkeárnyalatos, az alapszín $C0C0C0. A Windows clBtnFace színének értéke $B19983. Látható, hogy a két megjelenítés között jelentős különbség van, főleg akkor, amikor a Windows-ban beállított szín nagyon eltér a kép eredeti alapszínétől. Ezzel a módszerrel a kép mindig belesimul a komponens hátterébe, nem lesz feltűnő, bármilyen szín is van beállítva a Windows-ban.





Cikksorozat

#IDKategóriaCikk címeSorozat
1018DelphiVonalkód készítő komponens1. rész
1028DelphiVonalkód nyomtatása a QuickReport-al2. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2002 évkönyv 107. 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 |