Delphi - Egyedi megjelenítésű PageControl komponens

forráskód letöltése
A PageControl komponens sok más komponenshez hasonlóan rendelkezik egy lehetőséggel, amellyel a megjelenését egy kicsit befolyásolhatjuk. Ez viszont csak arra terjed ki, hogy a fülek területére rajzolhatunk, az egész megjelenítést nem tudjuk mi magunk meghatározni, a komponens kerete mindig a hagyományos marad. Ebben a példában mégis egy olyan PageControl komponenst készítünk, amelynek a teljes megjelenítését mi határozzuk meg a kerettől a fülek kinézetéig.
A mellékelt példaprogram megnyitása előtt a DrawPageControl.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
Mielőtt az új komponensről beszélnénk, nézzük meg, hogy milyen lehetőségünk van a megjelenítés befolyásolására új komponens létrehozása nélkül. Ehhez először is a PageControl komponens OwnerDraw property-jének értékét igazra kell állítani. Ezután már használhatjuk az OnDrawTab eseményt, ami a következőképpen néz ki:
OnDrawTab
Osztály: TCustomTabControl
property OnDrawTab: TDrawTabEvent;
Ez az esemény akkor jön létre, amikor a komponens egyik fülének területét kell megrajzolni.
Paraméterek
Control: TCustomTabControl
A komponens objektuma.
TabIndex: Integer
A fül sorszáma. Az első fül sorszáma 0, a másodiké 1, és így tovább.
const Rect: TRect
A fül „belső” területének koordinátáit tartalmazó Rect struktúra. Erre a területre rajzolhatunk a komponens Canvas objektumát felhasználva.
Active: Boolean
A paraméter értéke igaz, ha ez a fül az aktív.
Ha ennél többre vágyunk, akkor új komponenst kell készítenünk, amit jelen esetben a TPageControl osztályból származtatunk. Ebben létrehozunk egy WMPaint nevű eseménykezelő eljárást a WM_PAINT üzenethez. Ebben az eljárásban történik meg a komponens megrajzolása. Az új komponens nincs felkészítve minden lehetőségre, ezért létrehozunk egy DefaultDrawing nevű függvényt, amit a rajzolás előtt meghívunk.
DefaultDraw
Osztály: TDrawPageControl
function DefaultDraw: boolean;
Ez a függvény ellenőrzi a komponens azon propoerty-jeit, amelyek a megjelenítést befolyásolják, és igaz értékkel tér vissza, ha az eredeti megjelenítést kell használni. Nézzük melyek azok a property-k, amelyek adott értéke mellett az eredeti megjelenítést használjuk:
  • OwnerDraw: ha a property értéke hamis;
  • Style: ha a property értéke nem psTabs;
  • TabPosition: ha a property értéke nem tpTop.
Visszatérési érték
Igaz, ha az eredeti megjelenítést kell használni.
A megjelenítés egy része magában a WMPaint eljárásban történik, de a fülek kirajzolásához az OwnerDrawTab eljárást használjuk.
OwnerDrawTab
Osztály: TDrawPageControl
procedure OwnerDrawTab(
TabIndex: Integer;
const Rect: TRect;
Active: Boolean
);
Ez az eljárás rajzolja meg a megadott sorszámú fület.
Paraméterek
TabIndex: Integer
A megrajzolandó fül indexe.
const Rect: TRect
A fül koordinátáit tartalmazó TRect struktúra.
Active: Boolean
A paraméter értéke igaz, ha a fül aktív.
Két új property-t is felveszünk, amelyek szintén a megjelenítést befolyásolják.
TabBackground
Osztály: TDrawPageControl
property TabBackground: TColor;
A fülek mögötti terület színét adhatjuk meg ebben a property-ben.
BorderStyle
Osztály: TDrawPageControl
property BorderStyle: TDrawPageControlBorder;
A keret típusa. Értékei a következők lehetnek:
  • bsTopOnly: a keretnek csak a felső szélét rajzolja meg. Ez akkor használható jól, ha a komponens a Form kliens területéhez van igazítva;
  • bsFull: a teljes keretet megrajzolja.