Delphi - Az Internet Explorer kiegészítése saját eszköztárral

Explorer Extension 2. rész

forráskód letöltése
Ha olyan funkciókat akarunk az eszköztáron megvalósítani, amelyekkel például megadhatjuk, hogy melyik oldal jelenjen meg a böngészőben, akkor szükségünk lesz a böngésző objektumára. Ehhez viszont az IObjectWithSite interfészt kell felhasználnunk. Erről az interfészről lesz szó a cikksorozat második részében. Egy olyan eszköztárat hozunk létre, amin két link található az Animare Software weboldalaira.
Az IObjectWithSite interfész mindössze két függvénnyel rendelkezik:
SetSite
Osztály: IObjectWithSite
function SetSite(
const pUnkSite: IUnknown
):HResult;
A SetSite függvény egy pointert szolgáltat a site IUnknown interfészére. Ezen az interfészen keresztül további interfészeket érhetünk el. Lekérdezhetjük például az IOleWindow interfészt, amin keresztül az ablak leíróját kaphatjuk meg (GetWindow függvény), vagy a helyzetérzékeny súgót vezérelhetjük.
A böngésző objektumának lekérdezése az alábbi módon történhet:
var
  oct: IOleCommandTarget;
  sp: IServiceProvider;
  FWebBrowser: IWebBrowser2;
...
  oct:=pUnkSite as IOleCommandTarget;
  sp:=oct as IServiceProvider;
  sp.QueryService(IWebBrowserApp, IWebBrowser2, FWebBrowser);
Paraméterek
const pUnkSite: IUnknown
Ebben a paraméterben kapjuk meg az IUnknown interfész pointerét. Ezt az objektumot tároljuk el egy globális változóban, mert a GetSite függvénynél szükség lesz rá.
var
  FSite: IUnknown;
...
  FSite:=pUnkSite;
Visszatérési érték
A függvény visszatérési értéke S_OK, ha a művelet sikerült.
GetSite
Osztály: IObjectWithSite
function GetSite(
const riid: TIID;
out site: IUnknown
):HResult;
A GetSite függvény visszaadja a SetSite függvény által legutoljára megadott site interfész objektumát, illetve azon keresztül a meghatározott interfész objektumát adja vissza.
Paraméterek
const riid: TIID
A függvény által a site paraméterben visszaadott interfész IID (Interface Identifier) azonosítóját kapjuk meg ebben a paraméterben.
out site: IUnknown
Ebben a paraméterben kell megadnunk a lekérdezett interfész objektumát. Ha a SetSite függvényben megkapott interfész objektumát eltároltuk mondjuk az FSite nevű globális változóba, akkor a következőképpen adhatjuk meg a paraméter értékét:
if Assigned(FSite) then
  result:=FSite.QueryInterface(riid, site)
else
  result:=E_FAIL;
Visszatérési érték
A visszatérési érték S_OK, ha az interfész objektumának lekérdezése sikerült.

Explorer Extension cikksorozat