Delphi - Kedvencek mappából HTML oldal előállítása

forráskód letöltése
Amikor Internetezünk, akkor az érdekesebb weboldalak címeit általában felvesszük a Kedvencek menübe. A Kedvencek menü egy rendszermappa, hasonló a Start Menühöz, de ez weboldalak címeit tartalmazza, valamilyen szempont szerint mappákba rendezve. Ha van egy olyan weboldalunk, amelyen publikálni szeretnénk az általunk érdekesnek talált oldalakat, akkor ennek elég nehézkes lenne az előállítása még egy HTML szerkesztőben is. A mellékelt példában egy olyan komponenst mutatunk be, amely a Kedvencek mappából előállítja azt a HTML kódot, amit csak be kell illeszteni egy weboldal forráskódjának megfelelő helyére, és az összes link, ami a Kedvencek mappában található, táblázatszerűen, kategóriánként csoportosítva megjelenik. A mellékelt példaprogram megnyitása előtt a FavoritesToHTML.pas-ban lévő komponenst telepítenie kell a Delphi alá.

A linkek táblázatokba lesznek rendezve kategóriánként. A táblázat adatait a TableProperties (tábla tulajdonságok), a fejléc tulajdonságait a HeaderCell, a linkeket tartalmazó cellák tulajdonságait pedig a Cells property-n keresztül állíthatjuk be. Ezekhez a tulajdonságokhoz új osztályokat is létrehozunk, melyek a TPersistent osztályból származnak.

A komponens csak a táblázat HTML kódját állítja elő, a teljes weboldalét nem. A mellékelt példaprogramban látszik, hogy a felhasználás miként történhet.

Ha abból indulunk ki, hogy a Kedvencek mappa tulajdonképpen egy speciális könyvtár a háttértáron, és a linkeknek egy-egy fájl felel meg, akkor a feladat megoldása nem is olyan nehéz. A Kedvencek mappában a linkek bizonyos szempontok szerint további mappákban vannak tárolva, és a mappák száma, illetve az egymásba ágyazhatóság mértéke nincs szabályozva. Ebből következik, hogy az összes link beolvasásához egy rekurzív eljárást kell készíteni. A linkekhez tartozó fájlokat úgy kezelhetjük, mint egy ini fájlt.
A HTML kód előállítása az Execute eljárás meghívásával történik. Először is szükség van a Kedvencek mappa elérési útvonalára. Ez felhasználónként különböző lehet, ezért az SHGetSpecialFolderPath függvénnyel kérdezzük le azt. Ennek első paramétere az ablak azonosítója (Handle). A második paraméter egy pointer egy karakter tömbre, ahová az eredményt várjuk. A harmadik paraméter egy konstans, amivel megadjuk, hogy melyik rendszermappa elérési útvonalára lesz szükségünk. Ez a konstans jelen esetben a CSIDL_FAVORITES, illetve a CSIDL_COMMON_FAVORITES. Az utolsó paraméter egy logikai érték, ami azt határozza meg, hogy a mappát létre kell-e hozni, ha az nem létezik. A függvény használatához hivatkoznunk kell az ShlObj unit-ra.
var
  FavoritesFolder: array[0..MAX_PATH] of char;
...
  SHGetSpecialFolderPath((Owner as TForm).Handle, FavoritesFolder, CSIDL_FAVORITES, false);
Ha megvan a mappa útvonala, akkor meghívjuk a ScanURLs eljárást. Ez egy rekurzív eljárás, ami beolvassa a mappában található további mappákat, illetve fájlokat. A mappák neveit a folders, a fájlokét, amelyek kiterjesztése .url, az urls objektumban tároljuk. Mindkettő típusa TStringList. Az eljárás egyszeri lefutása egy mappa tartalmának beolvasását jelenti. Miután megvan a mappák és a fájlok listája, rendezzük azokat, majd egy ciklusban előállítjuk az aktuális mappában található linkek táblázatának HTML kódját. Ezután a mappa listán végighaladva rekurzívan meghívjuk az eljárást, paraméterként megadva a mappa elérési útvonalát.