Saját Web-böngésző készítése IV

 

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