Képnézegető fejlesztése II. - Delphi

 

A program alapjai már megvannak, most jöjjenek a „gyöngyszemek”, amitől a mi programunk „felhasználó barátabb” lesz, mint a többi piacon lévő program!

 

Kezdjük a „Kedvencek” gombbal. Ez a gomb arra lesz jó, hogy azokat az alkönyvtárakat, amikben a kedvenc képeink vannak, ide fel tudjuk venni. Az alkönyvtárakat egy popupmenüben fogjuk megjeleníteni, a menü első eleme az „Hozzáadás a kedvencekhez” menüpont lesz, erre kattintva kerül az aktuális alkönyvtár neve a kedvencek közé, amennyiben ilyen alkönyvtár még nem szerepel a kedvencek között!

 

Gondoljuk végig mit is fogunk csinálni, lépésről lépésre! Lenyomjuk a „Kedvencek” gombot és ennek hatására megjelenítjük a popupmenüt. A TSpeedButton-nak van Popupmenu property-je, de az arra való, hogy a jobb gomb lenyomására megjelenjen a komponenshez tartozó popupmenü, tehát ezt itt nem használhatjuk. Ezért felteszünk a formra egy TPopupMenu komponenst, és ezt fogjuk megjeleníteni a gomb lenyomásakor.

Azért itt már is van egy kis probléma! A gomb lenyomásakor nekünk kell gondoskodni a menü helyzetéről, és magáról a megjelenítésről is. A menüt a gomb alatt kell megjelenítenünk, így egyértelműen úgy néz ki, mintha tényleg a gombhoz tartozna. Ehhez azt kell tudnunk, hogy a popupmenük képernyő koordinátán jelennek meg, nem a formhoz pozícionálva! Tehát számoljuk ki a menü helyzetét a gomb alatt, majd jelenítsük meg! A pozíciót úgy kapjuk meg, ha a gomb pozícióját átszámoljuk képernyő koordinátára, majd a Popup() függvénnyel meg is jelenítjük:

 

procedure TForm1.SpeedButton1Click(Sender: TObject);

var TB: TSpeedbutton;

P: TPoint;

begin

      // A popupmenu1 (Kedvencek) meghívása

      TB:=TSpeedbutton(Sender);

      P:=Point(TB.Left,TB.Top+TB.Height); // Form koordináta

      P:=TB.ClientToScreen(P);           // Koordináta számítása képernyőre      PopupMenu1.Popup(P.X,P.Y);         // Megjelenítés

end;

 

A megjelenítés ezzel meg is van oldva, jöhet a következő probléma. A „Hozzáadás a kedvencekhez” menüpont kiválasztásakor az aktuális alkönyvtárat hozzá kell fűzni a menühöz, amennyiben az még nincs a menük között. Ezt a hozzáadást az AddKedvenc függvényben oldjuk meg, ami paraméterként a beillesztendő alkönyvtár nevét kapja meg.

 

A menü nulladik eleme a „Hozzáadás a kedvencekhez”, a következő egy elválasztó vonal, tehát a második elemtől kell vizsgálni a hasonlóságot. Azt tudni kell, hogy a menük elé a Delphi egy gyorsító karaktert tesz, valójában egy „&” jelet, és ennek hatására lesz aláhúzva egy karakter a menüben, ezzel lehet gyorsan elérni az adott menüpontot. Tehát összehasonlításkor minden menüben szereplő alkönyvtárban benne van ez az „&” jel valahol. Ezt a jelet el kell távolítani az összehasonlítás előtt, erre szolgál a GyorsitoLe függvény.

 

Amennyiben az alkönyvtár még nem szerepel a menük között, úgy bele kell tenni a PopupMenübe. Nézzük meg közelebbről a menük felépítését. Minden menüben az egyes menüpontok TMenuItem objektumok. Ezek tartalmazzák a menüpont nevét, gyorsító billentyűjét, az Eventeket és még sok mindent. Egy új menüpont létrehozásakor egy ilyen TMenuItem objektumot kell hozzáadni a menühöz. A Caption property tartalmazza a menüpont szövegét, jelen esetben az alkönyvtár nevét, és még kell az OnClick esemény, ami megmondja, hogy mit kell tenni, ha kiválasztjuk a menüpontot. Erre készítünk egy külön KedvencClick függvényt, ez hajtódik majd végre, amikor kiválasztunk egy alkönyvtárat a menüből.

 

procedure TForm1.AddKedvenc(s: string);

var TM: TMenuItem;

            sz,z: string;

            i: integer;

begin

      // Megnézzük, hogy nincs e még ilyen kedvenc

      z:=Uppercase(s);                   // Csupa nagybetű!

      for i:=2 to PopupMenu1.Items.Count-1 do

            begin

            sz:=Uppercase(GyorsitoLe(PopupMenu1.Items[i].Caption));

            if z=sz then                             // Már van ilyen!           

   exit;

            end;

      // Nincs még ilyen, hozzáadás a kedvencekhez!!!

      TM:=TMenuItem.Create(Self);

      TM.Caption:=s;               // Alkönyvtár neve lesz a menüpont!

      TM.OnClick:=KedvencClick;

      PopupMenu1.Items.Add(TM);    // Hozzáadás

end;

 

Nem is volt olyan bonyolult dolog, igaz?

 

Most nézzük meg azt a függvényt, ami meghívásra kerül egy kedvenc alkönyvtár kiválasztásakor. Ez a függvény a KedvencClick. A kiválasztott menüpontról megint leszedjük az „&” jelet a GyorsitoLe függvénnyel, majd amennyiben létezik a kiválasztott alkönyvtár, áttérünk arra:

 

procedure TForm1.KedvencClick(Sender: TObject);

var s: string;

begin

      // Kedvenc kiválasztása

s:=GyorsitoLe(TMenuItem(Sender).Caption);

if DirectoryExists(s) then               // Ha létezik, átkapcsolunk arra!

            DirectoryListBox1.Directory:=s;

end;

 

Ezzel már kész is van a kedvencek kezelése, csak még két apró dolgot kell megtenni. Egyrészt a programból kilépve el kell menteni a kedvenceket, induláskor pedig be kell tölteni őket. A kedvenceket is TIniFile-ban tároljuk, mint az összes többi beállítást. A FormCreate-ben betöltjük, a FormClose-ban elmentjük. Természetesen a mentést meg lehetne valósítani a „Hozzáadás a kedvencekhez” menüpontban is, mert így csak akkor mentenénk, ha ténylegesen kell, de mivel a kedvencek mentése nem idő, ezért a FormClose-ban is megoldhatjuk ezt a többi adat mentésével együtt.

A „Kedvencek” betöltése is egyszerűen megoldható az AddKedvenc függvény meghívásával!

 

Azért azt sem szabad eltitkolni, hogy a „Kedvencek” közül nem tudunk alkönyvtárat törölni, pedig ezt is meg kéne oldani valahogy. Ezt a feladatot mindenki önállóan próbálja megoldani, ez lesz a házi feladat. Azért azt megsúgom, hogy erre valók a „beállítás” ablakok, ahol az ilyen, mondhatjuk úgy is, hogy speciális feladatokat el lehet végezni.

 

A mi kis programunknak már most van néhány olyan szolgáltatása, amit nem minden program tud, pedig mint látható, igen könnyen megoldható dolgok ezek, csak oda kell rájuk figyelni!

Ezzel azonban mi még nem végeztünk, van még néhány ötletem a szolgáltatások körének bővítésére, de ezeket majd a következő számokban olvashatjátok! Addig is mindenki gondolkodhat azon, hogy Ő mivel bővítené a programot!

 

A forrás a lefordított programmal megtalálható a CD-n!

 

Pammer Pál - pp@freeweb.hu