Képnézegető fejlesztése I.

 

Képnézegető programokkal „Dunát lehet rekeszteni”, de úgy gondoltam, hogy gyakorlásnak, tanulásnak igencsak megteszi! Természetesen nem fogunk ACDSee programot írni, de még Paint Shop Pro-t sem, de azért szeretném megmutatni, hogy a bennük lévő trükkök nem is olyan nagy csodák, ezeket mi is meg tudjuk valósítani! Ezek a programok azért lettek olyan kedveltek, mert fejlesztésükkor figyeltek arra, hogy a felhasználók „használni” is tudják őket, ezért néhány igen kellemes, de egyáltalán nem bonyolult szolgáltatást építettek beléjük. Én a programomban nem kívánok igazi kép manipulációval foglalkozni, inkább csak nézőkét készítünk, de azért ebbe is teszünk néhány kellemes trükköt, egy kis fájl konverziót, csoportos manipulálási lehetőséggel, amit utána bárki kedve szerint tovább bővíthet.

 

Ezzel a példával azt is szeretném megmutatni, hogy átgondolt tervezéssel, tényleg minimális plussz erőráfordítással milyen kellemes, „felhasználóbarát” programot lehet készíteni!

 

Miután képnézőkét készítünk, igen fontos, hogy a felhasználó könnyen és gyorsan tudja kiválasztani a képeket, ezért a sima OpenDialog itt szóba sem kerülhet. A fájlok listája legyenek a formon, és innen egy kattintással választhassuk ki őket, ezért  használjunk FileListBox-ot a hozzá tartozó elemekkel. Természetesen a képet is meg kell jeleníteni a formon, úgy mint az ADCSee-ben! A gyorsabb kezelés érdekében lesz menü és toolbar is!

 

Először gondoljuk végig mit akarunk megvalósítani! A form bal oldalán legyen a fájl kiválasztására szolgáló ablak, a maradék területen pedig a kép. Miután a kép nagyobb is lehet, mint a form, ezért ScrollBox-ba tesszük majd bele az Image komponenst. Azért jó lenne, ha a fájl kiválasztó ablak méretét be is tudnánk állítani, de akár el is tüntethetnénk, tehát ennek megfelelően készítsük el a formunkat. Ezeken felül végig figyeljünk arra, hogy minél használhatóbb programot készítsünk. Olyan legyen, hogy a felhasználó mind a tíz úját megnyalja használat közben!

 

A fent leírtak alapján kezdjük is el a munkát! Lesz menünk, de ezt elhalasztjuk későbbre, ez még ráér. A ToolBar felrakása viszont fontos, tehát ezzel kezdjük. A gombokat majd a fejlesztés közben szépen beépítjük! Alul legyen StatusBar, mert információkat is meg fogunk jeleníteni!

 

Mivel az ablakban több elem is lesz, tegyünk fel a formra egy panelt, állítsuk az Align property-jét alClient-re. Bal oldalon lesz a fájl kiválasztás, tehát ide ismét tegyünk fel egy Panelt, és igazítsuk jobbra! Jó lenne, ha közben állítani is tudnánk ennek az ablaknak a méretét, tehát tegyünk a Panel mellé egy Splittert! (A Splitter AutoSnap property-jével szabályozhatjuk, hogy a mellette lévő panel teljesen eltünjön, vagy sem!) Az ablak többi részén lesz a kép, de mivel a képet esetleg srcollozni kell, ezért tegyünk fel először egy ScrollBox-ot, abba pedig egy Image komponenst, és mind a kettő Align property-jét állítsuk alClient-re!

 

Ezután kezdjük el a fájl kiválasztó ablak elkészítését. Felülre tesszük a meghajtó és az alkönyvtár kiválasztó részt, alul lesz a FileListBox. Azért itt is gondoljunk arra, hogy esetleg a FileListBox méretét be kívánjuk állítani, ezért a felső részt Panelra tesszük, majd Splitterrel elválasztva tesszük fel a FilterComboBox-ot és a FileListBox-ot. (Ezek helyett a komponensek helyett természetesen más komponenst is lehet használni!) Milyen kellemes lenne, ha „kedvenc alkönyvtárakat” is meg lehetne adni, mert így gyorsan lehetne mozogni az alkönyvtárak között. Ezért tegyünk fel a felső panel tetejére egy SpeedButtont, ez lesz a „Kedvencek gomb”, alá a Drive és a Directory kiválasztó komponenseket. Állítsunk be ügyesen mindent, különösen az Anchors property-ket, mert ezek az elemek nem rendelkeznek Align property-vel, de pozíciójukat meg tartaniuk a mögöttük lévő panel állításakor! Mivel a FileListBox maszkja induláskor nem kap értéket a FilterComboBox-tól, ezért ezt az értékadást a FormCreate-nál el kell végezni!

 

Állítsuk be a FilterComboBox-nál, hogy milyen állományokat kívánunk megjeleníteni. A Delphi alapértelmezett fájl formátumait adhatjuk meg, és még a JPEG kiterjesztést. Ennek használatához a unitunkban meg kell adni a JPEG unitot is! Természetesen a formátumok köre tovább bővíthető, hiszen az Internetről rengeteg komponens letölthető, és ezeket elég egyszerűen be is lehet építeni a programunkba! (Lehet, hogy a mi nézegetőnk is fog egyszer ismerni 100 képformátumot?)

 

Röpke 10 perc alatt már sokat fejlődött a programunk, igaz, hogy már egy sor forrást is kellett írnunk!

 

Most jön talán a legnehezebb rész, de azért megpróbáljuk röviden leküzdeni ezt is. A FileListBox-ban kiválasztott képet meg kell jelenítenünk az Image-ben. Itt több megoldás is lehetséges. Simán beolvassuk a képet és megjelenítjük az ablak közepén. Ilyenkor persze nagyobb is lehet a kép, mint a formunk, tehát a ScrollBox-ot is állítani kell. A másik eset, amikor a képet az ablak méretéhez igazítva kell megjeleníteni. Tegyünk fel a ToolBar-ra egy gombot, amivel ezt be tudjuk majd állítani! A ToolButton Style property-jét állítsuk tbsCheck-re, a lenyomott állapotban fogjuk a képet az ablak méretéhez igazítani. (Nem nagyítjuk, csak ha nagyobb, akkor kicsinyítjük!) Ilyen esetben természetesen figyelni kell arra, hogy a kép arányai ne változzanak meg, tehát nem lehet használni a sima Timage komponens Stretch propertyjét, mert az minden irányba kihúzza a képet, és ezért torzítja is!

Készítsünk egy FileOpen függvényt, ami gondoskodik a kép megjelenítéséről. Ezt a függvényt a FileListBox OnClick eventjénél hívjuk meg! Az összenyomást a PictureStretch függvény oldja meg! Természetesen a felhasználónak információkat is adunk a beolvasott képről, az alsó StatusBar-ra kiírjuk a kép méretét és a fájl nevét.

 

A lényeg már megvan, a képek megjelennek, úgyhogy most gondoljuk végig, hogy a felhasználó hogyan használja programunkat. Rákattint az ikonunkra, és a program elindul! Valahol, valamilyen méretben meg is jelenik a formunk! Azért ez nem maga a tökéj, hiszen valószínűleg az utoljára használt helyen és állapotban szeretné viszontlátni a programunkat. Vagyis kilépéskor el kéne menten az ablak pozicióját, indításkor pedig vissza kéne azt tölteni. A másik dolog, hogy képeket nézegetett valamelyik alkönyvtárban, a program azonban a saját alkönyvtárával indul, tehát minden indításkor a felhasználó nagy „szitkozódás közepette” megkeresi az utoljára használt alkönyvtárat. Mi viszont azt akarjuk, hogy a felhasználó szeresse és használja a programunkat, tehát ilyen dolgokra mi igencsak odafigyelünk, tehát ezeket is elmentjük kilépéskor, és még minden olyan beállítást, ami fontos lehet!

 

Az információk mentésére a legalkalmasabb a TiniFile komponens! Write… függvényekkel írjuk, és Read… függvényekkel olvassuk az IniFile-okat. A Form pozicióját elvileg az OnDestroy eventjénél kéne mentenünk, de itt van egy kis probléma. A WindowState mentése után ezt az értéket vissza kell állítanunk a wsNormal értékre, hogy a pozíciók jók legyenek, de itt már sajnos ez nem történik meg, ezért a mentést az OnClose eventnél valósítjuk meg, és az OnCreate-nél olvassuk vissza a beállításokat.

 

 

Mint látható, a programunk már teljesíti is a legalapvetőbb képnézegető program szolgáltatásait, sőt a felhasználó kedvében is jártunk egy kicsit, ráadásul még a munkába sem szakadtunk bele, hiszen alig írtunk néhány sort!

 

Természetesen mi nem állunk itt meg, hanem fejlesztünk tovább, hiszen ötlet még rengeteg van! Ezt azonban már csak a következő részben tesszük meg! Addig mindenki gondolkodhat azon, hogy milyen szolgáltatásokat fog beépíteni saját programjába!

 

 

Pammer Pál - pp@freeweb.hu