
A mellékelt példaprogram megnyitása előtt a DBJPGImage.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A DBJPGImage komponens a DBImage-ből származik. Ezáltal örökli annak minden tulajdonságát, amit eddig is használhattunk. Ezeken az alap tulajdonságokon felül képes arra, hogy a paradox táblák Binary vagy Graphic típusú mezőjében képeket tároljon el, illetve onnan képeket jelenítsen meg.
Ha egy képet el akarunk tárolni, akkor meg kell, hogy jegyezzük a kiterjesztését is. A kiterjesztés határozza meg azt, hogy a számítógép milyen algoritmus szerint dolgozza fel az adott képet.
Amikor létrehozunk egy adattáblát, amelyben képet szeretnénk tárolni, létre kell hoznunk egy String típusú mezőt is, amelyben a kép kiterjesztését fogjuk eltárolni.
Ahhoz, hogy ezzel a mezővel kapcsolatot tudjunk létesíteni, komponensünkben szükségünk van egy ExtensionField tulajdonságra. Ez a tulajdonság String típusú és a DataField tulajdonsághoz hasonlóan egy adatmező nevét fogja tárolni. A példaprogramban ez „Kiterjesztés”.
Szükséges továbbá egy Extension nevű tulajdonság is, amely szintén String típusú. Amikor egy fájlból töltünk be képet, akkor ebben a tulajdonságban tároljuk el ideiglenesen a kép kiterjesztését.
A LoadPicture metódus jeleníti meg az adattáblában lévő képet. A SavePicture metódus pedig a komponens Picture tulajdonságában elhelyezett képet menti el az adattáblába.
A LoadPicture függvény magja
Stream:=TMemoryStream.Create;
Blob:=TBlobStream.Create(DataSource.DataSet.FieldByName(DataField) as TBlobField,bmRead);
Stream.CopyFrom(Blob,0);
Stream.SaveToFile('Temp.'+fExtension);
Picture.LoadFromFile('Temp.'+fExtension);
DeleteFile('Temp.'+fExtension);
Blob.Free;
Stream.Free;
A TBlobStream objektummal csatlakozhatunk a paradox táblák bináris mezőihez. Ehhez hivatkoznunk kell az adattábla mezőjére. Jelen esetben ezt a mezőt a DataSource property-n keresztül tudjuk elérni. Típuskényszerítést kell alkalmaznunk, mert a TBlobStream.Create paraméterlistájában csak TBlobField típusú objektumot adhatunk meg. A következő paraméter (bmRead) azt jelenti, hogy az adott mezőből olvasni fogunk.
A BlobStream értékét nem tudjuk közvetlenül átadni a Picture property-nek. Ehhez egy picit trükköznünk kell. Adjuk át a BlobStream tartalmát egy MemoryStream-nek, amely rendelkezik a fájlba írás képességgel. A fájlból a Picture property pedig már be tudja olvasni a képet.
A SavePicture függvény magja
Az itt megvalósítandó eljárás ugyanaz, mint a LoadPicture-nél, csak fordított. A Picture property-ből elmentjük a képet egy fájlba. Azt beolvassuk egy MemoryStream-be, majd a BlobStream segítségével beírjuk azt az adattáblába.
A függvény visszatérési értéke True ha a mentés sikeres, ellenkező esetben False.
A komponens hozzákapcsolása az adattáblához
- Állítsuk be a komponens DataSource tulajdonságát.
- A DataField property-ben adjuk meg azt a bináris mezőt, amely a képet fogja tárolni.
- Az ExtensionField property-ben adjuk meg azt a String típusú mezőt, amely a kép kiterjesztését tárolja.
- Mielőtt meghívjuk a SavePicture metódust, az Extension property-be állítsuk be az elmentendő kép kiterjesztését.