|
|
Asztal háttérkép cserélő alkalmazás
|
|
Példaprogram letöltése
11097 bájt
|
Amikor megunjuk a Windows asztalon lévő aktuális háttérképet, akkor választhatunk egy másikat, de ez a művelet egy idő után fárasztó lehet. Sokkal kényelmesebb lenne, ha készítenénk egy listát a megjelenítendő képekből, és egy program minden indításkor kiválasztana egyet ebből a listából háttérképnek. Megtehetné ezt automatikusan, mondjuk a Windows minden újraindításakor, így mindig más-más hátteret kapnánk. Készítettünk egy komponenst, ami ezt a feladatot látja el.
A mellékelt példaprogram megnyitása előtt a WallpaperChanger.pas-ban lévő komponenst telepítenie kell a Delphi alá.
A háttérképnek használható képek fájlneveit az elérési útvonallal együtt egy egyszerű szövegfájlban tároljuk. Minden sor egy fájlnevet tartalmaz. A kép kiválasztása kétféleképpen történhet. Az első eset, amikor a képek egymás után követik egymást, a másik, amikor véletlenszerűen választunk egyet a listából.
A ListFileName property-ben adhatjuk meg annak a fájlnak a nevét, amiben a képek listája található. Amikor egy létező fájl nevét adjuk meg, akkor az abban található lista automatikusan betöltődik az ImageList property-be. Az ImageList property tartalmát kétféleképpen is szerkeszthetjük. Az egyik a szokásos módszer a TStringList típusú property-knél használt szerkesztő, amiben be kell gépelnünk a fájlok neveit. A másik, kényelmesebb módszer a komponens menüjének "Image list editor…" nevű menüpontjának használata. Erről később még szólunk néhány szót. A komponens menüjében további három menüpontot találhatunk. A"Load image list" menüponttal visszatölthetjük a ListFileName property-ben megadott fájl tartalmát. A "Save image list" elmenti a ListFileName property-ben megadott fájlba az ImageLIst property tartalmát. Az "Execute" menüponttal meghívjuk a komponens Execute metódusát, ami végrehajtja a háttérkép váltását. Ha a RandomSelect property értéke igaz, akkor a kép kiválasztása véletlenszerűen történik, ellenkező esetben a Registry-ben tárolt sorszámú kép lesz megjelenítve.
A megjelenítendő kép sorszámát a GetIndex függvénnyel tudjuk lekérdezni, míg a paraméterként megadott sorszámot a SetIndex eljárás tárolja el a Registry-ben.
Az Edit eljárás meghívásával egy szerkesztő ablakot kapunk, amiben a képek listáját tudjuk egyszerűen szerkeszteni. Amikor a menüből kiválasztjuk az "Image list editor…" menüpontot, akkor tulajdonképpen ezt az eljárást hívjuk meg. Ez a szerkesztő ablak azért került ilyen módon megvalósításra, hogy a képek listájának szerkesztése abból a programból is könnyen elérhető lehessen, amiben a komponenst felhasználjuk. Mielőtt az ablak megjelenik, az azon található TListBox típusú komponensbe áttöltjük az ImageList property tartalmát. Miután az ablak bezáródik, visszatöltjük a módosított listát a property-be.
A Load eljárás a ListFileName property-ben megadott fájl tartalmát betölti az ImageList property-be, ha a fájl létezik. A Save eljárás elmenti a képek listáját a megadott fájlba.
A képek váltását az Execute eljárás végzi. Ebben első lépésben lekérdezzük a megjelenítendő kép sorszámát a GetIndex függvénnyel, és ellenőrizzük, hogy van-e ilyen sorszámú kép a listában. Ha van, akkor lekérdezzük a fájl nevét, és ellenőrizzük a kiterjesztését. A program BMP és JPEG típusú képeket tud kezelni. Az eljárás mindkét esetben hasonló, a betöltött képet elmentjük egy adott néven, BMP formátumban. A különbség csak annyi, hogy a JPEG kép betöltéséhez a TJPEGImage osztályt használjuk fel. Itt kell szólnunk az OnSaveWallpaper eseményről. Ez az esemény azelőtt jön létre, mielőtt a képet elmentenénk BMP formátumban, és lehetőséget ad arra, hogy a képet módosítsuk, mielőtt elmentenénk. Így elhelyezhetünk rajta feliratokat, képeket, vagy akár rajzolhatunk rá egy naptárat is.
A háttérkép beállítását a SystemParametersInfo függvénnyel végezzük el:
SystemParametersInfo(
SPI_SETDESKWALLPAPER, 0,
PChar(PicName),
SPIF_SENDWININICHANGE + SPIF_UPDATEINIFILE);
Az első paraméterrel megadjuk, hogy mit is szeretnénk csinálni. A második paraméter jelen esetben 0, mivel ezt nem használjuk. A harmadik paraméter egy #0 karakterrel végződő fájlnév, ami a háttérkép-fájl neve. Az SPIF_SENDWININICHANGE és SPIF_UPDATEINIFILE konstansokkal megadjuk, hogy az új beállítást mentse el a rendszer, és értesítse a változásokról az összes futó alkalmazást.
A képek kiválasztásánál vegyük figyelembe, hogy a komponens a háttérkép megjelenítésének módját (középre, nyújtás, mozaikszerűen) nem módosítja, tehát azt előzőleg be kell állítani!
A komponenshez két példaprogramot is készítettünk. Az egyikben egy gombbal tudjuk váltani a komponensben megadott háttérképeket. A másik egy kicsit komolyabb program, amely akár önállóan is használható. Ez egy Form nélküli program, ami az első indítás után bejegyzi magát a Registry-be, és minden Windows indításkor automatikusan elindul. A komponenst futásidőben hozza létre, és betölti a piclist.txt fájl tartalmát, ami a képek listáját kell, hogy tartalmazza. Miután megváltoztatta a háttérképet, automatikusan bezáródik, és nem foglalja tovább a memóriát és a processzoridőt. A program törléséhez a megfelelő Registry kulcs alatt bejegyzett WPChanger értéket kell törölni. A kulcs a forrásban megtalálható.
A Project1 példaprogram futtatása előtt a komponens ImageList property-jét töltsük fel adattal, vagyis adjunk meg létező BMP és JPEG képeket.
A WPChanger példaprogram egy "piclist.txt" nevű fájlból tölti be a képek listáját, ezért ezt is töltsük fel adatokkal. Erre a legegyszerűbb módszer a másik példaprogramban megadott lista mentése.
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 435. oldal
Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!
|