HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Nem vizuális komponens ikonjának megváltoztatása szerkesztési időben


Példaprogram letöltése

5842 bájt

A nem vizuális komponensek futási időben nem, szerkesztési időben viszont látszanak a Form-on egy ikon formájában. Az ikon a komponens palettán lévő képet jeleníti meg. Ebben a példában azt vizsgáljuk meg, hogy hogyan tudjuk egy nem vizuális komponens ikonjának képét megváltoztatni a Form-on. Ezzel jelezhetjük egy property értékét, ahogyan azt a mellékelt példában is tesszük.

A mellékelt példaprogram megnyitása előtt a ComponentIconTest.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A mellékelt komponensnek nem sok haszna van, csupán egy logikai property-vel rendelkezik. Arra viszont jó, hogy bemutassuk a komponens ikonjának megváltoztatását.
Először is tudnunk kell, hogy minden nem vizuális komponenshez tartozik egy ún. container ablak, ami a komponens ikonját jeleníti meg. Ezt az ablakot látjuk a Form-on, ezt mozgathatjuk a megfelelő pozícióba. Alapesetben ez az ablak a komponens palettán is látható képet jeleníti meg, de egy kis trükkel megoldhatjuk, hogy az ablakot mi magunk rajzoljuk meg. Persze erre csak szerkesztési időben van szükség, hiszen a nem vizuális komponensek pont attól nem vizuálisak, hogy futási időben nem látszódnak.
A feladat megoldásához először is szükségünk lesz egy ablak leíróra, amit az AllocateHWND függvénnyel kaphatunk meg. Ehhez a leíróhoz kell egy üzenetkezelő eljárás is, ez lesz a WndProc eljárás. Ebben az üzenetkezelő eljárásban csak a WM_PAINT üzenetet fogjuk lekezelni. Ha ezt az üzenetet kapjuk, akkor meghívjuk a SetCWndProc eljárást, amiben megkeressük a komponenshez tartozó ablakot. Ehhez az EnumChildWindows függvényt használjuk. Ha megtaláltuk az ablakot, akkor hozzárendeljük a CWndProc üzenetkezelő eljárást, amiben szintén csak a WM_PAINT üzenettel kell foglalkoznunk. Ennél az üzenetnél fogjuk megrajzolni a komponens képét. Ehhez persze szükség van az ablak Canvas-ának leírójára, ezt viszont egyszerűen lekérdezhetjük a GetWindowDC függvénnyel. Ezt felhasználva akár rajzolhatunk is Windows API függvényekkel, de megrajzolhatjuk a képet egy TBitmap objektumban is, amit azután átmásolunk az ablak Canvas-ára. Ezt tesszük a mellékelt példában is.

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