Delphi - Program hozzárendelése állomány kiterjesztéshez

3. rész

forráskód letöltése
A kiterjesztések alapján regisztrált állományoknál a jobb gomb lenyomásakor legördülő menürendszerben felhasználhatunk hét alapértelmezett menüpontot. Ebben a cikkben most ezekkel, illetve használatukkal ismerkedünk meg.

Megtudhatjuk továbbá azt is, hogy miként szerezhetünk tudomást arról, hogy ha a felhasználó megfogta az általunk regisztrált állományt és rádobta egy nyomtató ikonjára, akkor melyik is az a nyomtató, amelyiken ki kell nyomtatnunk az állományunkat.

Továbbá azt is megvizsgáljuk, hogy programból miként kérdezhető le, hogy a felhasználó melyik menüpontot is választotta ebből a menüből. A mellékelt példaprogram megnyitása előtt az Extension.pas-ban lévő komponenst telepítenie kell a Delphi alá.

A program helyes működése érdekében az Extension1 komponens néhány alkönyvtárat tartalmazó property-jét át kell állítani attól függően, hogy Ön honnan futtatja a programot. Ezt a beállítást elvégzi a program a Form OnCreate eseményénél. Azonban, ha változtat a komponens beállításain, akkor célszerű, ha ezeket a könyvtárakat is átírja a megfelelőre, majd törölje a Form OnCreate-nél lévő erre vonatkozó forráskód részletet.

Mivel a komponens csak továbbfejlesztése a múlt héten bemutatottnak, így itt most csak az újdonságokat tárgyaljuk és egyúttal feltételezzük az Olvasóról, hogy tisztában van a múltkori cikk tartalmával, mivel itteni információk azokra épülnek.


A TExtension komponens ismét bővült két új property-vel. Ezek a MenuItems property-n belül találhatók meg. Az egyik a CanonicalVerbs property, a másik a Default property.

Az alapértelmezett menüpontok általában a legtöbbször használt műveleteket takarják. Ilyen például az adott állomány megnyitására, nyomtatására vonatkozó utasítás.

Ha egy ilyen alapértelmezett menüpontot használunk, akkor elhagyható a Caption property használata, mivel ilyenkor a menüponthoz tartozó megjelenő szöveget az operációs rendszer szolgáltatja. Ennek megvan az előnye és hátránya is. Előnye, hogy nem kell beállítgatnunk a Caption property-t. Hátránya - bár lehet, hogy ez is inkább előnye -, hogy attól függően, hogy milyen az operációs rendszer nyelve, ebben a menüben megjelenő szövegek is az adott nyelven jelennek meg.

Ilyen menüpont a következők egyike lehet: open, print, explore, find, openas, properties.
Mindegyik értelemszerűen használható. Megjegyzésként azért nem árt tudni, hogy ezzel csak a menüpont szövegét szabályozzuk, a menüpont kiválasztásakor végrehajtandó funkció továbbra is ránk, vagyis az adott programra van bízva.

Van még egy alapértelmezett menüpont, mely kimaradt a fenti felsorolásból. Ez nem más, mint a PrintTo. Ez eltér a többitől abban, hogy bár nyugodtan használhatjuk, ennek ellenére nem jelentkezik menüpontként. Ha viszont a felhasználó megfogja az általunk regisztrált kiterjesztésű állományok valamelyikét és rádobja egy nyomtató ikonjára, akkor a PrintTo bejegyzéshez tartozó alkalmazás indul el. Ha itt használjuk a %1, illetve a %2 paramétereket is, akkor megkaphatjuk egyszer a kiválasztott állomány nevét, elérési útvonalát, valamint azt, hogy a felhasználó melyik nyomtatóra dobta a dokumentumot, nyilván ezen illik kinyomtatni, ha már ez lett kiválasztva.
Így tehát megtudható, hogy melyik állományt melyik nyomtatón kell kinyomtatnia a programunknak.

Visszatérve a TExtension komponenshez. Ha tehát a CanonicalVerbs property-ben a cvNone értéktől eltérőt választunk, akkor ezzel létrehozunk egy alapértelmezett menüpontot. Ekkor nem szükséges a Caption property-t beállítanunk, a menüpont nevét majd az operációs rendszer adja. Ha viszont ennek ellenére használjuk továbbra is a Caption property-t, akkor természetesen az itt megadott értékből lesz a menüpont.


Ha több menüpontot hozunk létre egy-egy regisztrációkor, akkor mindig az első menüpont lesz az, melyet akár ki sem kell választania a felhasználónak ahhoz, hogy a hozzárendelt alkalmazás elinduljon, elegendő csupán rákattintani magára az állományra.

Ha azt szeretnénk elérni, hogy ne a listában az első menüpont legyen ez az alapérték, akkor használhatjuk a Default property-t. Ezt annál a menüpontnál állítsuk igazra, amelyiknél szeretnénk elérni a fenti hatást.

Fontos tudni, hogy csak egy ilyen Default property lehet igaz az összes menüpont között. Ha egynél többet adunk meg, akkor a komponens a listában a legutolsó ilyet választja ki.



Ezen új property-khez tartozó adatok is a Windows regisztrációs adatbázisába kell, hogy kerüljenek.

Az alapértelmezett menüpontoknál csupán annyi a teendő, hogy nem a komponens által generált Menu1, Menu2, stb. kulcsok alá kerülnek a bejegyzések, hanem mindig a megfelelő értéket kell használni. Tehát az Open esetén az Open sztring kerül a regisztrációs adatbázisba is és így tovább.

A Default property esetében pedig a Shell kulcs alapértelmezett bejegyzéséhez kell írni azt a kulcs megnevezést, melyet szeretnénk alapértelmezetté tenni a menürendszerben. Ha ez mondjuk a Menu2, akkor ide a Menu2 sztring kell, hogy kerüljön.


Annak eldöntésére, hogy amikor a felhasználó választ egy menüt ebből a menüpontból, melyik is került kiválasztásra, azt egyszerűen eldönthetjük a program indulásakor.

Mint az a mellékelt Unit1.pas-ban is látható, ha rákattintunk egy ilyen állományra, akkor a regisztráció alapján minden esetben ez a program indul el. Viszont minden CommandParams-ban más-más paramétert adtunk meg, így induláskor ennek vizsgálatával eldönthetjük a kérdést. A mellékelt példa az egyszerűség kedvéért csupán kiírja a kapott paramétereket, nyilvánvaló, hogy egy valódi felhasználás esetén itt különféle funkciókat kellene végrehajtani a különféle paraméterek esetén.

Próbálja ki azt is, hogy a mellékelt "teszt.xyz" állományt rádobja egy nyomtató ikonjára. Persze csak akkor, ha a regisztráció már lefutott és érvényesítve is lett.

Program hozzárendelése állomány kiterjesztéshez cikksorozat