HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

A TImageList osztály kibővítése egy képek keresése metódussal


Példaprogram letöltése

16403 bájt

Az SrcImageList komponens az ImageList komponens továbbfejlesztése. A TImageList osztályt alkalmassá tesszük arra, hogy egy megadott könyvtárban és annak alkönyvtáraiban megkeresse a BMP és ikon típusú képeket, majd azokat felvegye saját elemei közé. Ennek segítségével többé nincs szükség arra, hogy egy könyvtár tartalmát egyesével vegyük fel az elemek közé.

A mellékelt példaprogram megnyitása előtt az SrcImageList.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
Komponensünket tehát a TImageList osztályból származtatjuk. Kibővítjük a Directory, Files és SearchSub tulajdonságokkal.
A Directory tulajdonságban állíthatjuk be annak a könyvtárnak az elérési útját, amelyben keresni szeretnénk. A Files tulajdonságban két választási lehetőségünk van. Választhatunk, hogy BMP vagy ICO képeket szeretnénk keresni. A SearchSub tulajdonság igazra vagy hamisra állításával állíthatjuk be az alkönyvtárakban történő keresést.
Amikor felhasználjuk a komponenst, figyelni kell arra, hogy olyan könyvtárat adjunk meg, amelyben egyforma méretű képek vannak. A TImageList osztály ugyanis csak egyforma méretű képek tárolására alkalmas.
A képek beállításához hozzunk létre egy új típust.
type TFiles = (BMP, ICO);
Amikor módosul a Files tulajdonság értéke, akkor a kiválasztott kép típusnak megfelelő kiterjesztést eltároljuk az FExtension változóba.
procedure TSrcImageList.SetFiles(Value: TFiles);
begin
  FFiles:=Value;
  if Value=BMP then FExtension:='.bmp'
  else FExtension:='.ico';
  end;
end;
Az FExtension változó tartalmát a ScanFiles eljárásban használjuk fel.
A keresés megvalósításához a TImageList osztályt bővítenünk kell egy új metódussal is. Amikor a felhasználó beállította a kereséshez szükséges tulajdonságokat, akkor nincs más dolga, mint meghívni a Search metódust. A Search metódus a háttérben meghívja a ScanFiles metódust. A ScanFiles metódus hajtja végre a tényleges keresést.
ScanFiles metódus
procedure TSrcImageList.ScanFiles(Dir: String);
Szükségünk van egy Picture, TPicture típusú objektumra, amelybe az éppen megtalált képet fogjuk ideiglenesen beolvasni.
A kereséshez a FindFirst – FindNext párost használjuk. Ha a keresés során egy könyvtárat találunk és a SearchSub metódus értéke is igazra van állítva, akkor rekurzív módon meghívjuk a ScanFiles eljárást, melynek paramétereként a megtalált könyvtár nevét adjuk.
if FSearchSub and (F.Name[1]<>'.') then ScanFiles(Dir+F.Name);
Ha egy képet találtunk, akkor azt beolvassuk és elmentjük a képlistába.
if LowerCase(ExtractFileExt(F.Name))=FExtension then begin
          try
            Picture.LoadFromFile(Dir+F.Name);
            if FFirst then  begin
              Width:=Picture.Graphic.Width;
              Height:=Picture.Graphic.Height;
              FFirst:=False;
            end;
            if Files=BMP then Add(Picture.Bitmap,Picture.Bitmap)
            else AddIcon(Picture.Icon);
          except
          end;
        end;
A fenti kódban feldolgozás szempontjából különbséget kell tennünk BMP és ikon között, ezért különböző függvényt használunk a beolvasásukra.
Az FFirst egy globális változó, logikai típussal. Értékét a Search metódus állítja igazra. A TImageList osztály, így komponensünk is, csak egyforma méretű képek tárolására alkalmas. Az első beolvasott kép méretét fogja felvenni a komponens. Ha a méretezés megtörtént, akkor az FFirst értéke hamis lesz és a méretező algoritmus nem fut le többet az aktuális keresésben.

Cikksorozat

#IDKategóriaCikk címeSorozat
1099DelphiDBChart komponens felhasználása1. rész
1113DelphiTDBChart komponens2. rész
1122DelphiTDBChart komponens3. rész
1132DelphiTDBChart komponens4. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2002 évkönyv 709. 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!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |