Delphi - Az alapok

TActionList 1. rész

forráskód letöltése
A Delphi 4.0 egy új és igen hasznos komponenssel bővült, ez a TActionList. Új sorozatunkban e komponenst mutatjuk be az alapoktól a teljes felhasználási lehetőségekig.
A sorozat első cikkéből megtudhatjuk, hogy hogyan takaríthatunk meg sok időt a fejlesztés során e komponens használatával. Nézzük mire is jó ez a komponens. Biztos Ön is találkozott már olyan esettel szoftverfejlesztés során, hogy egy adott kódrészletet többször kellett volna felhasználnia, például ha egy menüpont kiválasztására, illetve egy nyomógomb lenyomására is ugyanazt a funkciót szeretné végrehajtani. Eddig az volt a megoldás, hogy ez a kódrészlet egy külön eljárásba került és mind a menüpont, mind a nyomógomb OnClick eseményénél ez az eljárás került meghívásra.
Abban az esetben, ha valamilyen oknál fogva átmenetileg le kellett tiltani ezt a funkciót a felhasználó előtt, akkor mind a két objektumnál át kellett állítani az Enabled property-t. Arról már nem is beszélve, ha a például azt szeretnénk, hogy mindkettőnek ugyanaz legyen a Caption property-e, vagy ugyanaz a súgó szöveg tartozzon hozzá (Hint), stb.
A TActionList komponens ezeket a felesleges munkákat hivatott megkönnyíteni. A Delphi 4.0 egy új és igen hasznos komponenssel bővült, ez a TActionList. Új sorozatunkban e komponenst mutatjuk be az alapoktól a teljes felhasználási lehetőségekig.
A sorozat első cikkéből megtudhatjuk, hogy hogyan takaríthatunk meg sok időt a fejlesztés során e komponens használatával. Nézzük mire is jó ez a komponens. Biztos Ön is találkozott már olyan esettel szoftverfejlesztés során, hogy egy adott kódrészletet többször kellett volna felhasználnia, például ha egy menüpont kiválasztására, illetve egy nyomógomb lenyomására is ugyanazt a funkciót szeretné végrehajtani. Eddig az volt a megoldás, hogy ez a kódrészlet egy külön eljárásba került és mind a menüpont, mind a nyomógomb OnClick eseményénél ez az eljárás került meghívásra.
Abban az esetben, ha valamilyen oknál fogva átmenetileg le kellett tiltani ezt a funkciót a felhasználó előtt, akkor mind a két objektumnál át kellett állítani az Enabled property-t. Arról már nem is beszélve, ha a például azt szeretnénk, hogy mindkettőnek ugyanaz legyen a Caption property-e, vagy ugyanaz a súgó szöveg tartozzon hozzá (Hint), stb.
A TActionList komponens ezeket a felesleges munkákat hivatott megkönnyíteni.

A mellékelt példaprogram már egy kész állapotot mutat, ránézésre viszont nem biztos, hogy egyértelmű a létrejöttének mikéntje. Ezért először ezt vesszük sorra.

Első lépésként nyissunk egy új Form-ot helyezzünk el rajta egy TActionList, TMainMenu és TToolBar komponenst. Szükségünk lesz továbbá egy TPanel-re és egy TImageList-re, amelyben a képeket tároljuk. A TMainMenu és a TActionList Images property-éhez rögtön rendeljük is hozzá az TImageList komponensünket.

Hozzunk létre három menüpontot és TToolBar-on három nyomógombot. Egyik esetben se állítsunk be semmit, csak hozzuk létre őket.

Ha ezzel megvagyunk, akkor most nézzük a TActionList komponenst. Ha a jobb gombbal kattintunk rajta, akkor találunk egy Action List Editor menüpontot. Választhatjuk ezt is, de ennél egy gyorsabb megoldás, ha duplán kattintunk a komponensen. Mindkét esetben megnyílik egy ablak, ahol létrehozhatjuk, kezelhetjük az egyes elemeket.

A New Action gombbal hozhatunk létre új ún. cselekményt (Action). Ha megnézzük, az Object Inspector-ban láthatjuk, hogy egy-egy elemnek TAction a típusa. Nézzük meg milyen property-ket tartalmaz egy ilyen objektum.

Ha az alábbi property-knek értéket adunk és majd a későbbiek folyamán hozzárendeljük ezt a cselekményt egy másik objektumhoz (menüpont, nyomógomb), akkor ezek automatikusan az itt megadott értékeket fogják felvenni:

Caption, Checked, Enabled, HelpContext, Hint, ImageIndex, ShortCut, Tag, Visible

Miután beállítottuk a kívánt értékeket, válasszuk az első menüpontot és az Action property-nél válasszuk ki a legördülő listából az Action1 cselekményt. Ekkor az összes beállított érték átkerül a menüpont megfelelő property-jébe. Ugyanezt játsszuk végig a többi menüpontnál, illetve a nyomógomboknál is, nyilván mindig a megfelelő Action-t választva.

Ha ezzel készen vagyunk, akkor láthatjuk, hogy minden értéket csak egyszer kellett megadnunk és ha ezek után változtatni szeretnénk, akkor elég csak az adott Action-nál megtenni ezt. Például a 2. nyomógomb és 2. menüpont letiltását az Action2.Enabled:=false; utasítással megtehetjük.

Hogy egy adott menüpont illetve nyomógomb OnClick eseményekor is ugyanaz az eljárás kerüljön végrehajtásra, ahhoz létre kell hoznunk minden cselekményhez (Action) egy-egy OnExecute eljárást. Ennél az eljárásnál kell megadnunk a megfelelő kódot, ahogyan az a mellékelt példaprogramban is látható.

További apró trükk a példaprogramban, hogy egy-egy ilyen cselekményt nemcsak olyan módon használhatunk fel, ahogyan azt eddig tettünk. Ha megfigyeljük az Action4-et azért hoztuk létre, mert az ott elhelyezett kód lefuttatására mind az Action1, illetve Action2 esetén szükségünk van. Ekkor felesleges kétszer bemásolni a forráskódunkba ugyanazt a részt, célszerűbb helyette egy újabb cselekményt létrehozni, majd ha szükség van rá, akkor a TAction Execute eljárásával lefuttatni a hozzárendelt kódot.
Ezek után sokakban biztos felmerül a kérdés, hogy minek ezt ennyire megbonyolítani, ehhez egy sima eljárás létrehozása és annak a meghívása is tökéletesen megfelelne. De azt már ennyi ismerettel is beláthatjuk, hogy egy ilyen Action sokkal többre képes, mint ha csak egy sima eljárást használnánk, de akiket a fenti példák sem győzték meg teljesen, azokat visszavárjuk a következő TActionList komponenssel foglalkozó cikkünkben.

TActionList cikksorozat