Živě.cz o počítačích a internetu

Tipy a triky v Delphi, díl 154. - webové stránky do EXE souboru

Jan Šindelář 15.9.2004

Dnes si předvedeme opět jednu nezvyklou techniku a sice jak vložit webovou prezentaci přímo do EXE souboru našeho projektu.

Pravidelní čtenáři tuší, že kdykoliv se téma točí okolo vkládání čehosi přímo do EXE souboru, bude pravděpodobně řeč o zdrojích aplikace (resources). I tentokrát to bude ten případ.

Cílem našeho dnešního snažení tedy bude vložení jednoduché webové prezentace přímo do souboru naší aplikace. Zmiňovaná "webová prezentace" se bude skládat ze dvou stránek. Na první, hlavní stránce, nalezneme jeden obrázek a odkaz na stránku druhou. Druhá stránka pak bude obsahovat velmi jednoduchý JavaScript. To bude jen stručný nástin možností uvedeného postupu, nic nám pochopitelně nebrání vytvořit mnohem složitější webovou prezentaci.

Nejprve začneme tvorbou HTML stránek, připravíme si obrázek a soubor s JavaScriptem a vše poté popíšeme příslušným způsobem do resource souboru, který poté zakompilujeme do našeho projektu. Nemusíte se bát, všechny potřebné soubory si budete opět moci stáhnout na konci článku.

HTML kód stránky píšeme zcela běžným způsobem až na menší detail. Odkazujeme-li na nějaký externí zdroj, tedy například obrázek, jiný HTML soubor a nebo třeba soubor s JavaScriptem či stylem, neodkazujeme se na něj jeho jménem a cestou (ať už relativní či absolutní), ale jeho označením v resource souboru. Vše bude jasné hned za chvilku, až si kousek HTML kódu ukážeme a hned poté také resource soubor. Postup je to tedy trochu nepříjemný v případě, že se snažíme do aplikace vložit již hotovou prezentaci, protože v tom případě musíme upravit všechny odkazy, cesty k obrázkům a podobně.

Na obrázek se tedy budeme odkazovat tímto způsobem:

img src="/GIF/ZIVE"

přičemž ve zdrojovém resource souboru bude odpovídající řádek pro tento soubor vypadat následovně:

ZIVE GIF "zive.gif"

Princip je myslím jasný. Prostě každý soubor webové prezentace má ve zdrojovém resource souboru své zvláštní pojmenování (kterým pak na soubor odkazujeme), "typ" (který vlastně odpovídá jakési složce) a poté cestu k fyzickému souboru. Celý zdrojový resource soubor pro náš příklad bude vypadat takto:

INDEX HTML "index.html"
INDEX2 HTML "index2.html"
ZIVE GIF "zive.gif"
SCRIPT JS "script.js"

Práci s resource soubory jsme už zkoušeli mnohokrát, takže jen kratičký návod pro připomenutí. Výše uvedené čtyři řádky zdrojového resource souboru uložíme pod názvem html.rc (v jednoduchém ASCII editoru, třeba v Poznámkovém bloku). Tento zdrojový soubor poté zkompilujeme pomocí utility pro příkazový řádek brcc32.exe, který naleznete v podsložce BIN ve složce Delphi. Příkaz pro zkompilování je jednoduchý, jako parametr uvedeme pouze název zdrojového souboru:

brcc32.exe html.rc

Výsledkem bude soubor html.res, což je náš výsledný soubor se zdroji. Už nám zbývá jen zahrnout jej do našeho projektu v Delphi. Do zdrojového kódu tedy přidáme příslušný řádek, takže celé to bude vypadat nějak takto:

.
.
.
implementation

{$R *.dfm}
{$R html.res}
.
.
.

A dostáváme se pomalu k cíli našeho snažení. Zbývá nám zkompilovat náš projekt, abychom získali EXE soubor a přichází na řadu samotné zobrazení naší miniprezentace. To provedeme pomocí Internet Exploreru a protokolu res. Spustíme IE a jako adresu vložíme cestu k našemu EXE souboru spolu s příslušným parametrem:

res://C:\Project1.exe/HTML/INDEX

Parametr tvoří jednak typ (tedy ona „složka“ HTML) a dále název příslušné HTML stránky (INDEX). V okně Exploreru se pak zobrazí naše ukrytá prezentace.

Že vás to neuspokojilo? Máte pravdu, zobrazovat stránky tímto způsobem by bylo dost nešikovné, spíše to měla být ukázka využití protokolu res. S trochou šikovnosti si můžete v IE zobrazit například některé obrázky (ve formátu, který IE podporuje) z různých programů. Stačí trocha experimentování.

Nás pochopitelně bude zajímat přímé zobrazení v naší aplikaci. Je to vlastně velmi snadné. Na formulář umístíme komponentu WebBrowser a do OnCreate hlavního formuláře pak vložíme tento jednoduchý příkaz:

WebBrowser1.Navigate(`res://` + Application.ExeName + `/HTML/INDEX`);

A máme hotovo. V okně naší aplikace máme zobrazenu naší webovou miniprezentaci. Dnešní ukázkový projekt stahujte zde.