Delphi - Legördíthető csúszkával kiegészített Edit komponens

forráskód letöltése
Ha van egy Edit komponensünk, amelyben számot kérünk be a felhasználótól, akkor ennek a feladatnak a megoldásához jól használható a mellékelt komponens. Az Edit komponensben elhelyezünk egy gombot, amelyre kattintva egy csúszka jelenik meg az Edit alatt. Ezzel a csúszkával a felhasználó beállíthatja a kívánt értéket egy minimum és egy maximum érték között. A csúszka komponens akár külön is használható, tehát ebben a példában két komponenst is készítünk.
A mellékelt példaprogram megnyitása előtt a DrownDownTrackBar.pas-ban lévő komponenseket telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
Az első komponens neve SimpleTrackbar lesz, és a TCustomControl osztályból származtatjuk. A komponensnek adhatunk egy keretet a BorderStyle property-t használva, erre majd akkor lesz szükség, amikor „legördülő” csúszkaként használjuk fel. Mint a neve is mutatja, ez egy egyszerű csúszka komponens, ezért korlátozott beállítási lehetőségekkel rendelkezik. Csak vízszintes elrendezésű lehet, és csak a maximum érték beállítására van lehetőség. A csúszka egy bitkép, amit erőforrásként tárolunk, és onnan töltünk be a komponens konstruktorában.
A csúszka aktuális pozícióját a Position property-ből olvashatjuk ki, illetve állíthatjuk be. Futási időben a csúszkát az egérrel mozgathatjuk. A két beállítási lehetőség miatt hoztuk létre a PosToKnobPos, és a KnobPosToPos függvényeket. Előbbi a Position property értékét számolja át a csúszka pozíciójába, míg az utóbbi pont a fordítottját teszi, a csúszka pozíciójából számolja ki a Position property értékét. A Position property értékének megváltozásakor jön létre az OnChange esemény, amit a DropDownTrackBar komponensnél is felhasználunk.
A DropDownTrackBar komponenst a TCustomEdit osztályból származtatjuk, és mivel egy gombot is elhelyezünk benne, így megjelenése és használata a ComboBox komponenshez lesz hasonló. A Text property ugyan nem fog látszani, helyette viszont kapunk egy Value property-t. Ebben a property-ben a MinValue és MaxValue értékek közé eső számot adhatunk meg. A komponensben felülírjuk a KeyPress eljárást, amiben gondoskodunk róla, hogy csak számokat lehessen beírni.
A gomb egy SpeedButton komponens lesz, aminek OnClick eseményéhez hozzárendeljük a ButtonClick eljárást. Ebben nem teszünk mást, mint meghívjuk a DropDown eljárást. A DropDown eljárásban létrehozzuk a fent bemutatott TSimpleTrackBar típusú csúszka komponenst. Mivel ennél a komponensnél nem adható meg minimum érték, ezért egy kicsit trükköznünk kell, és a Max property-ben a MaxValue property értékét adjuk meg, kivonva belőle a MinValue property értékét. Így a beállítható intervallum hossza nem változik. A komponens OnChange eseményéhez hozzárendeljük a DoDropDownChange eljárást. Ebben kiolvassuk az aktuális pozíciót, hozzáadjuk a MinValue property értékét, és az eredményt beírjuk a Value property-be, ami közvetett módon a Text property értékét adja meg. Ez azt fogja eredményezni, hogy a csúszka mozgatása közben a Text property is folyamatosan változik, így az aktuális érték mindig látható lesz.
A csúszka komponens OnExit eseményéhez hozzárendeljük a DoDropDownExit eljárást, amiben felszabadítjuk a csúszka komponens objektumát, így tulajdonképpen el is tüntetjük azt.