Az előző cikkben azt ígértem, hogy a kedvencek
kezelésével együtt fogom ismertetni a saját komponensünk forrását, de később át
gondoltam a dolgot, és mégis inkább úgy döntöttem, hogy kettészedem, és most csak
a kedvencek kezelését írom le.
Megoldás
A múltkori cikkben beígértem a mentésre való
figyelmeztetés megoldását, tehát ezzel kezdem a cikket.
Én úgy oldottam meg, hogy felhasználtam még egy
változót, ez egy boolean változó, és hozzáadtam az OnCreat eseményhez, hogy legyen false
az értéke, majd a memo OnChange-hez
hogy váltson true-ra. Majd megkerestem a savedialog meghívását és ott átállítottam az értékét false-ra, majd készítetem egy új procedure-t
(a neve nem lényeges) és ezt írtam bele:
Begin
if b=true then begin
if messagedlg ('Még nem mentett!'+#13+'Elmenti a változásokat?',mtConfirmation,
[mbYes, mbNo], 0) = mrYes then Form6.Mentes1.click;
//én a mentés nevű menüpontot
hívom meg, aki gombra, vagy egyébre tette, az itt azt hívja meg.
end;
end;
Ezt meghívtam a form OnClose eseményénél, új html
kérésénél, és megnyitásnál.
Kedvencek
A kedvencek kezelése a fő form-on
történik, tehát térjünk vissza a form1-hez. Ide helyezzünk fel egy ListBox komponenst ezen fognak megjelenni
az oldalak címei. Keressük meg azt a gombot, amelyiknek azt a nevet adtuk, hogy
kedvencek (ez nem csak gomb lehet), majd kössük az OnClick
eseményéhez a következőket:
if listbox1.Visible=false then begin
listbox1.Items.LoadFromFile('kedv.list');
listbox1.Visible:=true;
end
else listbox1.Visible:=false;
Ebből kitűnik, hogy a kedvencek listája a kedv.list nevű fájlban lesz tárolva. Persze a listbox-ot tegyük láthatatlanná (Visible := false). Most a listbox OnClick eseményéhez
kössük a következőt:
webbrowser1.Navigate(listbox1.Items[ListBox1.ItemIndex]);
Tegyünk fel a form-ra egy
új gombot, aminek adjuk a Hozzáadás a kedvencekhez caption-t,
majd az OnClick eseményéhez kössük a következőket:
ListBox1.Items.Add(combobox1.Text);
Tegyünk fel a form-ra egy
új gombot (caption:=’Kedvencek
importálása IE-ből’).
Kössük az OnClick
eseményéhez a következőket:
var pidl: PItemIDList;
FavPath: array[0..MAX_PATH]
of char;
begin
SHGetSpecialFolderLocation(Handle, CSIDL_FAVORITES, pidl);
SHGetPathFromIDList(pidl, favpath);
ListBox1.Items. AddStrings(GetIEFavorites(StrPas(FavPath)));
end;
A uses-hez adjuk hozzá
ezt: shlobj.
Most készítsünk egy funkciót a következőképpen:
function GetIEFavorites(const favpath: string):TStrings;
var searchrec:TSearchrec;
str:TStrings;
path,dir,filename:String;
Buffer: array[0..2047]
of Char;
found:Integer;
begin
str:=TStringList.Create;
path:=FavPath+'\*.url';
dir:=ExtractFilepath(path);
found:=FindFirst(path,faAnyFile,searchrec);
while found = 0 do
begin
SetString(filename, Buffer,
GetPrivateProfileString('InternetShortcut',
PChar('URL'), NIL, Buffer, SizeOf(Buffer),
PChar(dir+searchrec.Name)));
str.Add(filename);
found := FindNext(searchrec);
end;
found:=FindFirst(dir+'\*.*',faAnyFile,searchrec);
while found=0 do
begin
if ((searchrec.Attr and
faDirectory) > 0) and
(searchrec.Name[1]<>'.') then
str.AddStrings(GetIEFavorites(dir+'\'+searchrec.name));
found := FindNext(searchrec);
end;
FindClose(searchrec);
Result:=str;
end;
Ezt a funkciót hívjuk meg a gombnál, és ez szerzi
meg nekünk a címeket a kedvencek listájáról.
Most már csak egy dolog maradt hátra, mégpedig hogy
a kilépéskor elmentsük a kedvenceink listáját, tehát kössük a form OnClose eseményéhez a
következőket:
ListBox1.Items.SaveToFile('kedv.list');
Most nem teszek a cikk végére forrást
mert a fő form-ot folytattuk, és az egész forrást
fölösleges volna ideírni, hiszen a cikksorozat utolsó részéhez úgyis mellékelem
majd az összes forrást, és a programot is.
Továbbiak
Most már tényleg csak a komponens maradt, meg a
levélfogadó.
Csubák Péter - chuby@chello.hu