HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Dokumentum számláló komponens


Példaprogram letöltése

8874 bájt

Ha kíváncsiak vagyunk rá, hogy milyen Word dokumentumok vannak egy adott könyvtárban, azok mekkora méretűek és hány oldalasak egyenként, illetve összesen, akkor a mellékelt komponens hasznos lesz számunkra.
A mellékelt példaprogram megnyitása előtt a DocSearch.pas-ban lévő komponenst telepítenie kell a Delphi alá.

A Path property-ben kell megadni azt a könyvtárat, amiben a Word dokumentumok vannak. A SubDir property-vel szabályozhatjuk, hogy az alkönyvtárakban is történjen-e keresés a fájlok után. Az AllPageCount property adja vissza a megvizsgált dokumentumok összesített oldalszámát. A Result property a TOwnedCollection osztályból származik, és ebben lesznek felsorolva a megtalált Word dokumentumok, és azok adatai.

A komponenst szerkesztési időben is használhatjuk, ehhez a hozzárendelt menüből az Execute menüpontot kell kiválasztani. A példaprogramot is így próbálja ki a property-k beállítása után!

A fájlok keresése az Execute eljárás meghívásával kezdődik. Ebben első lépésben csatlakozunk a Word alkalmazáshoz, és töröljük a Result, valamint az AllPageCount property-ket.
procedure TDocSearch.Execute;
begin
  FWord:=CreateOleObject('Word.Application');
  FWord.Visible:=false;
  FAllPageCount:=0;
  FResult.Clear;
  ScanFiles(FPath);
  FWord.Quit;
end;

A ScanFiles rekurzív eljárás végzi a fájlok beolvasását, és az adatok gyűjtését. Az eljárásnak egy paramétere van: a beolvasandó könyvár elérési útvonala.
procedure TDocSearch.ScanFiles;
var F:TSearchRec;
begin

Első lépésben ellenőrizzük, hogy az elérési útvonal „\” karakterre végződik-e. Ha nem, akkor ezt pótoljuk.
  if dir[Length(dir)]<>'\' then dir:=dir+'\';

A fájlok beolvasásához a remélhetőleg már jól ismert FindFirst, FindNext és FindClose függvényeket fogjuk használni. Ha a SubDir property értéke igaz, akkor rekurzívan beolvassuk az alkönyvtárak tartalmát is.
  if FindFirst(dir+'*.*', faAnyFile, F)=0 then begin
    repeat
      if (F.Attr and faDirectory)<>0 then begin
        if FSubDir and (F.Name[1]<>'.') then ScanFiles(dir+F.Name);
      end else begin

Ha a fájl kiterjesztése .doc, akkor megnyitjuk, a Result property-hez hozzáadunk egy elemet, majd a FileName, FileSize property-knek értéket adunk. Ezután megnyitjuk a fájlt a Word-del, és lekérdezzük az oldalak számát. Ezt az ActiveDocument BuildinDocumentProperties függvénnyel tehetjük meg, aminek paraméterként a „Number of Pages” sztringet adjuk meg. Előtte viszont meg kell hívni a Repaginate függvényt, máskülönben előfordulhat, hogy rossz eredményt kapunk. Az oldalak számát a PageCount property-ben tároljuk, valamint hozzáadjuk az AllPageCount property-hez. Ha megvan minden szükséges adat, akkor lezárjuk a fájlt.
        if LowerCase(ExtractFileExt(F.Name))='.doc' then begin
          with FResult do begin
            Add;
            Items[Count-1].FFileName:=dir+F.Name;
            Items[Count-1].FFileSize:=F.Size;
            FWord.Documents.Open(dir+F.Name);
            FWord.ActiveDocument.Repaginate;
            Items[Count-1].FPageCount:=FWord.ActiveDocument.BuiltinDocumentProperties['Number of
                Pages'].Value;
            inc(FAllPageCount, Items[Count-1].FPageCount);
            FWord.ActiveDocument.Close;
          end;
        end;
      end;
    until FindNext(F)<>0;
    FindClose(F);
  end;
end;



Cikksorozat

#IDKategóriaCikk címeSorozat
1166DelphiOsztály hierarchia lekérdezése1. rész
1180DelphiOsztály hierarchia lekérdezése2. rész


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