Delphi - Fejléc egyedi kirajzolása a Form-ra

forráskód letöltése
Egy Form használatakor a fejléc megjelenítésére soha sincs gondunk, ezt a Form automatikusan intézi. Mi van akkor, ha igényeinknek nem felel meg az alap és ezen változtatni szeretnénk.
A mellékelt programban saját kézbe vesszük a fejléc kirajzolását úgy, hogy a megjelenítés paramétereit mi szabályozhatjuk. Ehhez a DrawCaption Windows függvényre lesz szükségünk.

A függvény 4 paraméterrel rendelkezik:
1. annak az ablaknak az azonosítója (Handle), melyből a függvény veszi az ikont és szöveget
2. az ablak területének leírója (hDC)
3. az a terület, ahova a fejlécet rajzolni kell (TRect)
4. a Flag paraméter a kirajzolás tulajdonságait határozza meg. Értéke lehet 0, vagy a következő értékek kombinációja:
DC_ACTIVE - a kirajzoláshoz az aktív fejléc színét használja
DC_GRADIENT - ha ez a flag be van állítva, akkor fejléc háttere színátmenettel lesz megrajzolva a COLOR_GRADIENTACTIVECAPTION (ha a DC_ACTIVE flag be van állítva), vagy a COLOR_GRADIENTINACTIVECAPTION színek felhasználásával. Ha ez a flag nincs bekapcsolva, akkor a fejléc háttérszínét a COLOR_ACTIVECAPTION (DC_ACTIVE beállítása esetén), vagy a COLOR_INACTIVECAPTION színekkel lesz megrajzolva.
  • DC_ICON - kirajzolja az ikont a fejléc szövege elé
  • DC_TEXT - kiírja a fejléc szövegét
  • DC_INBUTTON - úgy rajzolja meg a fejlécet, mintha button lenne
  • DC_SMALLCAP - kis betűvel írja ki a fejléc szövegét. Ebben az esetben az ikon nem jelenik meg! Ha a "small caption font" megegyezik a "normal caption font"-tal, akkor a betűméret nem változik!
A kívánt eredmény eléréséhez először is készítünk egy saját eseménykezelő eljárást (WMNCActivate), amely a WM_NCACTIVATE üzenet hatására hajtódik végre. Ez az üzenet akkor keletkezik, amikor megváltozik az ablak aktív vagy inaktív státusza, és a keretet újra kell rajzolni.

A WMNCActivate eljárásban a következő lépéseket végezzük el:
1. a GetWindowDC függvénnyel lekérdezzük az ablak területének leíróját
2. beállítjuk a fejléc tulajdonságait (Flag), melyeket a Form-on elhelyezett CheckBox-okkal befolyásolhatunk
3. beállítjuk a fejléc szövegét attól függően, hogy az ablak aktív, vagy inaktív-e
4. kiszámítjuk a fejléc területét és a close button területét
5. töröljük a fejléc területét
6. a DrawCaption függvénnyel megrajzoljuk a fejlécet
7. a DrawFrameControl függvénnyel megrajzoljuk a Close Button-t

A program tartalmaz egy ApplyChanges nevű eljárást, amely akkor hajtódik végre, amikor valamelyik CheckBox-ot átállítja a felhasználó. Ebben az eljárásban mi küldünk az ablaknak egy WM_NCACTIVATE üzenetet, hogy frissítse a fejlécet az új beállításokkal.

A WMNCActivate eljárás módosításával megoldhatjuk, hogy az ablakunk fejléce teljesen egyéni legyen. Ehhez csak egy TCanvas típusú osztályra, és az ablak leírójára van szükség, melyet a GetWindowDC függvénnyel kérdezhetünk le.