
A mellékelt példaprogram megnyitása előtt a DeleteCache.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
Ennek a cache mappának a fizikai helye függ az operációs rendszer verziójától és adott esetben az aktuálisan bejelentkezett felhasználótól is. Így például lehet ez az alábbi mappa is:
C:\Documents and Settings\Rendszergazda\Local Settings\Temporary Internet Files
Nézzük most a gyakorlatot:
A létrehozott komponens Execute függvényét kell meghívni abban az esetben, ha listáztatni, vagy esetleg törölni is szeretnénk a cache elemeit. Ez utóbbit a Delete logikai típusú property szabályozza.
procedure TDeleteCache.Execute;
begin
size := 0;
A keresést a FindFirstUrlCacheEntry függvény hívásával indíthatjuk el. Előtte azonban szükségünk lesz arra a méretre, hogy a függvény működéséhez mekkora memória buffert kell lefoglalnunk. Ezt az értéket szintén e függvény adja meg, ha annak első és második paraméterében nil értéket adunk át.
FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), size);
GetMem(icei, size);
if size > 0 then begin
icei^.dwStructSize:=size;
end;
Ezek után már indíthatjuk a keresést, melyet egy repeat ciklusban ismétlünk addig, amíg csak van eleme a cache-nek.
d:=FindFirstUrlCacheEntry(nil, icei^, size);
if d <> 0 then begin
repeat
A ciklusmagban egy eseményen keresztül értesítjük a komponensen kívüli világot arról, hogy újabb elem találtatott a cache-ben. Ilyenkor a megtalált objektum eredeti URL-jét át is adjuk az eseménykezelőnek.
if Assigned(FOnDeleteFile) then begin
FOnDeleteFile(self, icei^.lpszSourceUrlName);
end;
Ha a Delete property igaz, akkor a DeleteUrlCacheEntry függvény hívásával töröljük az adott objektumot a cache-ből.
if FDelete then begin
DeleteUrlCacheEntry(icei^.lpszSourceUrlName);
end;
FreeMem(icei, size);
size:=0;
A FindNextUrlCacheEntry függvény fogja a következő elemet elővenni a cache-ből. Ehhez azonban ismét szükséges egy nil paraméterekkel történő hívás, hogy megtudhassuk mekkora memória területet kell lefoglalnunk a híváshoz.
FindNextUrlCacheEntry(d, TInternetCacheEntryInfo(nil^), size);
GetMem(icei, size);
if size > 0 then begin
icei^.dwStructSize:=size;
end;
Application.ProcessMessages;
until not FindNextUrlCacheEntry(d, icei^, size);
end;
FreeMem(icei, size);
A listázását a FindCloseUrlCache függvény hívása zárja.
FindCloseUrlCache(d);
end;