HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Legördülő panel komponens


Példaprogram letöltése

23302 bájt


Ha egy programban sok beállítási lehetőség található, de ezek egy része csak ritkán, speciális esetekben használt, akkor érdemes ezeket elrejteni a felhasználó szeme elől, és csak akkor megjeleníteni, amikor valóban szükség van rájuk. A mellékelt komponenssel ez a feladat gyerekjáték.

A mellékelt példaprogram megnyitása előtt a DropDownPanel.pas-ban lévő komponenst telepítenie kell a Delphi alá.

A DropDownPanel komponens, mint a neve is mutatja hasonlóképpen viselkedik, mint egy Panel komponens. A legfontosabb különbség az, hogy mindig a bal felső sarokban jelenik meg a Caption, a jobb felsőben pedig egy gomb, amivel a panelt lehet legördíteni, illetve becsukni. Szerkesztési időben a panel mérete tetszés szerint állítható, és azon komponensek helyezhetők el. Futási időben viszont, ha a DroppedDown property értéke hamis, akkor a panel bezárt állapotban van, vagyis a mérete csak akkora, hogy a Caption és a gomb látszik, a többi komponens nem. Amikor a DroppedDown property értéke igaz lesz, akkor a panel magassága automatikusan akkorára változik, hogy az arra helyezett összes komponens látható legyen. A komponens Align property-jének értéke alapértelmezetten alTop, így az egymás alá helyezett komponensek úgy fognak látszani, mint egy lista, amelynek elemei kinyithatók.

A komponenst a TCustomControl osztályból származtatjuk. Bár más komponenseket is tartalmazhat, önmaga is birtokolhatja a fókuszt, amit jelez is. Amikor a komponens birtokolja a fókuszt, akkor bármelyik billentyű leütésére lehet a panelt nyitni és zárni. Ebből a két mondatból következik, hogy a WMSetFocus, WMKillFocus és WMKeyDown eljárásokat felül kell írnunk. A panel dupla kattintással is nyitható-zárható, ehhez viszont a WMLButtonDblClick eljárásra is szükség lesz.

Az AdjustHeight eljárás végzi el a komponens magasságának kiszámítását és beállítását. Bezárt állapotban a komponens magassága a gomb képének magasságával egyezik meg, ellenkező esetben a komponensen található kontrolok pozíciójából és magasságából számítódik ki az a magasság, aminél minden komponens megfelelően látszik. Ez utóbbi esetben van szerepe a BottomBorderHeight property-nek, ami ehhez a magassághoz még hozzáadódik.

A ButtonCursor property-ben megadhatjuk, hogy amikor a gomb fölé ér az egér, akkor milyen képe legyen. Ez alapértelmezetten a crHandPoint, ami egyből jelzi a felhasználónak, hogy ide kell kattintania. A gomb tulajdonképpen egy TImage komponens, amelynek OnClick eseményéhez hozzá van rendelve a ButtonClick eljárás. Ez utóbbi a DroppedDown property értékét változtatja az ellenkezőjére. A gombhoz tartozó két property még a Glyph és a NumGlyphs. Mivel a gomb tulajdonképpen egy kép, ezért gondoskodunk róla, hogy a Glyph property mindig tartalmazzon egy bitképet, ehhez viszont erőforrásként tárolunk egyet. Ezt a képet a SetDefaultGlyph eljárás állítja be.
A Glyph property megtalálható több komponensnél is, melyek képeket is tartalmaznak (pl. SpeedButton). Jellemzője, hogy ez egy olyan kép, amely legalább 1, maximum pedig 4 egyforma méretű képet tartalmaz egymás mellett elhelyezve, melyek közül mindig csak az egyik látható. A képek számát határozza meg a NumGlyphs property. A Glyph property felhasználása egy kicsit eltér a többi komponensnél alkalmazott módszernél. A Glyph mind a négy képe (ha ennyi van) felhasználásra kerül. Az első két kép a bezárt, a második kettő pedig a legördített állapotokat mutatja. A páratlan számú képek akkor jelennek meg, amikor az Enabled property értéke igaz, a páratlanok pedig ellenkező esetben.
A megfelelő kép beállítása a SetActiveGlyph eljárásban történik, amikor a képet a gomb Picture property-jébe másoljuk.

A Panel fejlécének szövegét a Caption property-ben adhatjuk meg. A CaptionBold ehhez kapcsolódik. Ezzel egyszerűen beállíthatjuk, hogy a cím vastag (igaz érték), vagy normál betűtípussal legyen kiírva.

Egy fontos dologról gondoskodni kell. Amikor a panel bezárt állapotban van, akkor a rajta lévő komponensek (amelyek ugye nem látszanak) nem lehetnek aktívak, vagyis amikor a felhasználó a Tab billentyűt használja, akkor ezekre a komponensekre nem kerülhet a fókusz.
Ezt legegyszerűbben úgy kerülhetjük el, hogy ha DroppedDown property értékének megváltozásakor ezek Visible property-jének értékét igazra, vagy hamisra állítjuk. Ezzel még csak félig oldottuk meg a dolgot, mert mi van akkor, ha futási időben van létrehozva egy komponens a panelen, és közben a DroppedDown property értéke nem változik. Ennek elkerülésére felülírjuk a CMControlListChange eljárást, ami akkor fut le, amikor egy komponens a panelra kerül, vagy éppen törölve lesz róla. A Message paraméter lParam mezőjének értéke egy logikai érték, aminek értéke igaz, ha hozzáadás, és hamis, ha törlés történik. A wParam mező a komponens objektumának címét tartalmazza. Az eljárásban szintén a Visible property értékét állítjuk be, az aktuális állapotoktól függően.




Cikksorozat

#IDKategóriaCikk címeSorozat
3916WindowsA javascript nyelv bemutatása1. rész
3946WindowsJavascript változók és operátorok2. rész
3975WindowsKódvezérlés JScript-ben3. rész
4004WindowsFüggvények és objektumok4. rész
4036WindowsFejlett funkciók a JavaScript nyelvben5. rész
4066WindowsFejlett funkciók a JavaScript nyelvben - folytatás6. rész
4116WindowsReguláris kifejezések7. rész
4145WindowsReguláris kifejezések - folytatás8. rész


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