Delphi - Komponens fejlesztés haladóknak

5. rész

forráskód letöltése
A komponens fejlesztés cikksorozat mostani fejezetében a múlt heti cikkben szereplő példaprogramot fogjuk továbbfejleszteni. Egész pontosan azt vizsgáljuk meg, hogy egy saját fejlesztésű komponenshez miként lehet tetszőleges menüpontokat felvenni abba a gyorsmenübe, ami akkor jelenik meg, amikor a komponensen jobb gombbal kattintunk. Ezekhez az új menüpontokhoz természetesen tetszőleges funkciókat is rendelhetünk.

Megvizsgáljuk az is, hogy miként lehet tetszőleges funkciót rendelni ahhoz az eseményhez, ha a komponensen duplán kattintunk. A komponens fejlesztés cikksorozat mostani fejezetében a múlt heti cikkben szereplő példaprogramot fogjuk továbbfejleszteni. Egész pontosan azt vizsgáljuk meg, hogy egy saját fejlesztésű komponenshez miként lehet tetszőleges menüpontokat felvenni abba a gyorsmenübe, ami akkor jelenik meg, amikor a komponensen jobb gombbal kattintunk. Ezekhez az új menüpontokhoz természetesen tetszőleges funkciókat is rendelhetünk.

Megvizsgáljuk az is, hogy miként lehet tetszőleges funkciót rendelni ahhoz az eseményhez, ha a komponensen duplán kattintunk.

Mivel ez a cikk folytatása a múlt heti példának, így a komponensben található TNewClass osztály létrehozásának menetét most nem ismertetjük újra.

Ahhoz, hogy a fent leírtakat megvalósíthassuk, szükségünk lesz egy saját ún. komponens editor osztályra. Ennek a forráskódja a SampleComponentEditor.pas-ban található.

Itt létrehozunk egy osztályt a TDefaultEditor-ból származtatva. Ez az osztály gondoskodik a komponensünk szerkeszthetőségéről alapesetben. Most viszont, hogy egy újat létrehozunk ebből származtatva, kiegészíthetjük plusz funkciókkal.

Nézzük először a gyorsmenü kiegészítését.

Ehhez felül kell írnunk a GetVerbCount függvényt. Ezt a komponens szerkesztő fogja meghívni, mikor jobb gombbal kattintunk a komponensen. Itt egyetlen dolgunk van: visszatérési értékként azt a számot kell megadnunk, hogy hány darab menüponttal szeretnénk bővíteni a menürendszert.

Második lépésként a GetVerb függvényt kell felülírnunk. Ez lesz az a függvény, ahol a komponens szerkesztő megkérdezi tőlünk az új menüpontok szövegét. Paraméterként kapunk egy Index nevű változót, ebből tudhatjuk meg, hogy aktuálisan hányadik menüponthoz tartozó szöveget kell visszaadnunk.

Végezetül már csak azt kell lekezelnünk, hogy mi történjen az egyes menüpontok kiválasztásakor. Ehhez az ExecuteVerb eljárás felülírására van szükségünk, ugyanis a komponens szerkesztő ezt fogja meghívni, ha ebből a menürendszerből kiválasztunk egy-egy menüpontot.

Itt szintén az Index paraméter tájékoztat bennünket arról, hogy melyik menüpont lett kiválasztva. Ennek megfelelően tetszőleges funkciót építhetünk be.

A mellékelt példában mi az első menüpont kiválasztásakor a TNewClass osztályból létrehozott property-nek a szerkesztését végeztetjük el az Edit eljárás meghívásával.

A második menüpont kiválasztásához pedig egy egyszerű üzenet ablakot jelenítünk meg.

Hátra van még a dupla kattintás lekezelése. Ehhez az EditProperty eljárást írjuk felül. Itt paraméterként kapunk egy PropertyEditor nevű változót, melyben az adott property-hez tartozó szerkesztő osztályt érhetjük el.

Első lépésként ellenőrizzük, hogy melyik property-ről is van szó. Ha a NewClass-ról, akkor meghívjuk az ehhez a property-hez készített szerkesztő ablakot.

Ennél az eljárásnál kapunk még egy Continue nevű változót is. Ezt abban az esetben, ha a NewClass property-ről van szó, hamisra állítjuk, akkor ezzel tudatjuk a komponens szerkesztővel, hogy a szerkesztési eseményt lekezeltük és nem kell folytatnia a további keresést, hogy melyik osztály is tudja lekezelni ennek a property-nek a szerkesztését.

Komponens fejlesztés haladóknak cikksorozat