Delphi - TActionList komponens

TActionList 2. rész

forráskód letöltése
Az előzőekben megismertük a standard akciók felhasználásának módját, láttuk, hogy ezeket fel lehet venni egy akciólistára, és csak hozzárendeljük menüelemekhez, eszközgombokhoz, és máris a megszokott módon működnek. A standard akciók az Edit, Window, Help menükben találhatók, valamint az adathalmazon (DataSet) végzett hagyományos műveleteket valósítják meg. A programfejlesztőnek szüksége lehet más akciókomponensekre, melyeket felvesz a standard akciók listájára, majd a kívánt helyen felhasználja.

Cikkünkben a File menühöz tartozó New, Open és Save parancsokhoz fejlesztünk három akciókomponenst, melyek speciálisan egy TMemo osztálybeli szöveg-editor tartalmát törlik, feltöltik egy fájl tartalmával, illetve elmentik a lemezről kiválasztott fájlba. A mellékelt példaprogram megnyitása előtt a FileAction.pas-ban lévő komponenst telepítenie kell a Delphi alá.

Az első cikkben említettük, hogy egy akció végrehajtásához meg kell találni a célobjektumot. Az alkalmazás az akcióval paraméterezett CM_ACTIONEXECUTE üzenetet kap, melyet az aktív Form-nak, vagy ennek hiányában az alkalmazás fő Form-jának (Main Form) továbbít.

A Form, amely megkapta az üzenetet, kiválasztja az éppen aktív kontrollt, és ennek ExecuteAction metódusát indítja el, az akciót paraméterül adva. Ekkor az aktív kontroll az akció HandlesTarget metódusát hívja meg, saját magát paraméterül adva. Ha HandlesTarget igaz (True) értékkel tér vissza, akkor a kontroll megfelelő célobjektum az akció végrehajtásához. Így az aktív kontroll meghívhatja az akció ExecuteTarget metódusát, saját magát paraméterül adva, és végrehajtódnak az akció műveletei.

Ha az akció HandlesTarget metódusa hamis értékkel tér vissza, azaz az aktív kontrollon nem hajthatjuk végre az akciót, akkor a Form a fent leírt módon próbálja saját magát az akció célobjektumaként elfogadtatni. Ha ez sem sikerül, akkor a Form-on található összes látható kontroll kipróbálásra kerül, míg valamelyik célobjektumként nem lesz megfelelő. Végül, ha ily módon sem sikerül lekezelni az akciót, akkor az automatikusan tiltásra kerül.

Először létrehozzuk a TFileAction osztályt, mint a TCustomAction leszármazottját. Ebben a három akció közös elemeit mind definiáljuk. Ebből származtatjuk az egyes akciókat: TFileNew, TFileOpen, TFileSave. Ezeknek csak a konstruktorait és ExecuteTarget metódusát kell megírni.

Mindhárom akció használhatja a SaveDialog párbeszédpanelt (Dialogs komponenspaletta), hisz megnyitásnál és új dokumentum kezdésénél is szükség lehet mentésre, a memo régi tartalmának törlése előtt. Ezért a TFileAction konstruktora inicializálja a mentés párbeszédablakát. Az OpenDialog csak megnyitásnál lesz felhasználva, ennek egy példányát TFileOpen akció konstruktora hozza létre. Az egyes akciók konstruktorai egyébként csak a címke (Caption), tipp (Hint) és billentyűkombináció (ShortCut) tulajdonságok értékeinek beállításával lettek kibővítve.

A TFileAction osztály Control tulajdonsága az akció tárgyát képező kontrollt tartalmazza, ehhez a belső FControl változó tartozik, melyet a SetControl metódus állít be.

Közös metódus a HandlesTarget is, mely megállapítja, hogy az akció a paraméterül adott célobjektumon elvégezhető-e. Ezt is a TFileAction osztályban vezettük be.

A TCustomAction Enabled tulajdonsága jelzi, hogy engedélyezett-e az akció. Példánkban egyedül a FileSave akciót korlátoztuk, csak akkor engedélyezett, ha a memo nem üres és módosítva lett. Ezt az akció állapotát frissítő Update eljárás mindig ellenőrzi.

Az akciók felvételét a standard akciók közé a RegisterActions eljárás végzi, ahol kategóriaként 'File' lett megadva.

TActionList cikksorozat

TActionList komponens - TActionList 1. rész

TActionList komponens - TActionList 2. rész