|
|
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;
|
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!
|