|
|
|
|
Példaprogram letöltése
18528 bájt
|
Néhány alkalmazásban találkozhatunk olyan ablakokkal, melyek fejlécén egy gomb található, amivel a Form-ot össze lehet „csukni” úgy, hogy csak a fejléce látszik. A gombra való újbóli kattintással a Form „kinyílik”. Most egy olyan komponenst készítünk, amit ráhelyezve egy Form-ra ilyen ablakot varázsolhatunk belőle.
A mellékelt példaprogram megnyitása előtt a RollUpForm.pas-ban lévő komponenst telepítenie kell a Delphi alá.
Két fő feladat van, amit a komponensnek meg kell oldania. Az első, hogy egy saját gombot jelenítsen meg a fejlécen, a másik, hogy tudja kezelni a Form-hoz érkező üzeneteket.
A komponens konstruktorában le kell cserélnünk a Form ablakkezelő eljárását a sajátunkra, hogy a Form-hoz érkező üzeneteket fel tudjuk dolgozni:
with (Owner as TForm) do begin
FOldWndProc:=WindowProc;
WindowProc:=NewWndProc;
end;
A NewWndProc eljárásban az üzeneteket felhasználva tudjuk a fejlécen megjeleníteni, illetve kezelni az új gombot. A gomb kirajzolását a DrawButton eljárás végzi. Ebben lekérdezzük a Form dc-jét (Device Context) a GetWindowDC függvénnyel, és létrehozunk egy TCanvas objektumot, amire a gombot rajzoljuk. Ahhoz, hogy a gomb a Form-on jelenjen meg, a Canvas Handle property-jének értékül kell adni a Form dc-jét. Így a Form teljes területére rajzolhatunk, beleértve a fejlécet és a kereteket is.
A gomb pozíciójának kiszámításához a GetButtonRect függvényt használjuk, ami egy TRect típusú struktúrában visszaadja a gomb koordinátáit. A pozíció kiszámításánál több dolgot is figyelembe kell venni. A fejléc gombjainak szélességét, a fejléc magasságát, valamint a keretek szélességét a GetSystemMetrics függvénnyel kérdezhetjük le. Ha ezek megvannak, akkor még azt is figyelembe kell venni, hogy a Form fejlécén mely gombok látszanak.
A komponens Active property-jében adható meg, illetve onnan olvasható ki, hogy a Form „összecsukott” állapotban van-e, vagy sem. Ha a property igaz értéket kap, akkor az FOriginalHeight változóban eltároljuk a Form kliens területének magasságát, majd beállítjuk a magasságot a komponens ClientHeight property-ben megadott értékre (OnRollUp esemény), ellenkező esetben pedig az FOriginalHeight változóban eltárolt értékre állítjuk be a Form ClientHeight property-jét (OnRollDown esemény).
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 484. 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!
|