HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

CD borítót készítő komponens készítése


Példaprogram letöltése

7131 bájt

Számos programban találkozhatunk olyan lehetőséggel, hogy egy CD-ről tartalomjegyzék készül és a tartalomjegyzék CD borító formájában kerülhet kinyomtatásra. Készítünk egy komponenst, amely megvalósítja ezt a lehetőséget. A tartalomjegyzék készítés szintjét, a megjelenítendő oszlopok számát és a CD nevét mi adhatjuk meg. Lehetőség van arra is, hogy a nyomtatandó tartalomjegyzéket felülírjuk.

A mellékelt példaprogram megnyitása előtt a CDContents.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A komponens tetszőleges meghajtóról képes tartalomjegyzéket készíteni, de nyomtatni csak CD borítót nyomtat.
A Drive property-ben kell megadnunk a listázandó meghajtó betűjelét. A listázás szintjét a DirLevel értéke határozza meg. 0 érték megadása esetén csak a főkönyvtár kerül kilistázásra.
A keresés az Execute metódus meghívásával kezdődik, eredménye a List property-be kerül, amely TStringList típusú.
A CDName property-ben megadhatjuk azt a nevet, amely majd a CD borító oldalán lesz látható. A tartalomjegyzék egy vagy több oszlopban jelenhet meg. Ezt a Columns property értéke szabályozza. A nyomtatás az első CD borítón kezdődik és a hátsón ér véget.
A nyomtatandó feliratok betűtípusát a Font property-ben állíthatjuk be.
A Preview metódus meghívásával megtekinthetjük a nyomtatási képet, a Print-tel pedig nyomtathatunk.
A komponens a TComponent osztályból származik.
A nyomtatást QuickReport komponensek segítségével hatjuk végre. Ehhez a háttérben létre kell hoznunk egy Form-ot, azon pedig egy QuickRep komponenst. Az FReport-on el kell helyeznünk egy QRBand komponenst, amelyre majd a feliratokat és alakzatokat fogjuk felhelyezni.
Egy CD borító első oldalának mérete 12.1x12 cm, a hátsóé 15x11.8 cm, amelyből 7-7 mm a felhajtható rész. A két borítót TQRShape típusú objektumok segítségével rajzoljuk meg. Összesen 4 db ilyen objektumra van szükségünk. Az objektumokat az FShapes tömb tartalmazza.
FShapes: array[1..4] of TQRShape;
A megadott meghajtón történő keresés algoritmusa a ScanFiles metódusban található.
procedure ScanFiles(Dir: String; Level: Byte);
Az eljárás rekurzívan meghívja saját magát, egészen addig, még a Level paraméter értéke el nem éri a DirLevel property-ben megadott értéket.
A Dir paraméterben kapott könyvtárban a FindFirst és FindNext eljárásokat használjuk az állományok megkeresésére.
if FindFirst(Dir+'*.*',faAnyFile,F)=0 then begin
Kétfajta állománybejegyzéssel találkozhatunk. Az egyik a könyvtár a másik a sima állomány. Azt hogy az éppen beolvasott elem könyvtár-e, az alábbi módon dönthetjük el:
if ((F.Attr and faDirectory)<>0) and (F.Name[1]<>'.') then begin
A könyvtárakat csupa nagybetűvel írjuk be az FList-be, a fájlokat pedig csupa kisbetűvel. Ügyelnünk kell a fa szerkezet ábrázolására is. Az alárendelt elemeket mindig két szóközzel beljebb kezdjük.
if Level>0 then
  for i:=0 to Level do
    s:=s+'  ';
s:=s+LowerCase(ExtractFileName(F.Name));
FList.Add(s);
A nyomtatási kép elkészítésért a SetPositions metódus a felelős.
procedure SetPositions;
A feliratok megjelenítését két blokkban kell feldolgoznunk, a két borítónak megfelelően. A MaxWidth változóban tároljuk el egy oszlop lehetséges méretét.
MaxWidth:=FShapes[1].Width div FColumns;
Az Index változó mindig az FList következő elemére mutat. A Col változó mutatja meg, hogy a borítón belül hányadik oszlopba kell elhelyeznünk a soron következő feliratot. A következő felirat Top tulajdonságát a Row értéke mutatja.
Felhasználva ezeket a változókat, egy while ciklus segítségével elhelyezhetünk a borítón annyi feliratot, amennyi éppen ráfér.
while (Index<FList.Count) and (Col<FColumns) do begin
Az elhelyezett feliratokat az FLabels dinamikus tömb tárolja el.
Miután elkészítettünk egy oszlopot, egy TQRShape objektum segítségével megrajzoljuk az oszlopot lezáró keretet.
Miután elkészült a borító, a végén, egy teljesen fehér TQRShape segítségével el kell takarnunk a kilógó feliratokat.
A CD nevét nem tudjuk megjeleníteni TQRLabel objektumok segítségével, mert azt elforgatva kell megrajzolnunk. A CD név megjelenítéséhez TQRImage objektumokat használunk.
Először létrehozunk egy ideiglenes TBitmap típusú változót, amelyen megrajzoljuk a CD nevét, képként.
Bitmap.Canvas.TextOut(Bitmap.Width div 2-Bitmap.Canvas.TextWidth(FCDName) div 2,
  Bitmap.Height div 2-Bitmap.Canvas.TextHeight(FCDName) div 2,FCDName);
for i:=1 to 3 do
  Rotate90Degrees(Bitmap);
Ezt a képet a Rotate90Degrees eljárás segítségével elforgatjuk 90 fokonként. Majd az így kapott képet helyezzük el a TQRImage-en.
Picture.Bitmap.Assign(Bitmap);

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