WebBrowser i zasoby
madmike
Postaram się pokazać w jaki sposób można umieścić stronę html wraz z grafikami czy stylami w zasobach programu, aby później móc wyświetlać ją za pomocą komponentu TWebbrowser.
Całość można podzielić na kilka kroków:
- Przygotowanie strony
- Przygotowanie pliku RC
- Zmiana odnośników na stronie
- Kompilacja zasobów
- Użycie zasobów i webbrowsera w programie
1. Przygotowanie strony:
Budujemy poprawną stronę html wraz z grafikami i stylami. Ponieważ ja jestem marnym webmasterem użyłem kawałka "Kompendium Delphi 7" Adama Boducha. Nie ma tu żadnego ograniczenia ilości plików, czy też typów grafik.
Stronkę z tego kroku umieściłem w katalogu html1 - Ponieważ pliki wymagają jeszcze pewnego przystosowania do umieszczenia ich w zasobach, kopiuję je wszystkie do katalogu html2 (na tych plikach będę dokonywał wszystkich koniecznych zmian)
2. Przygotowanie pliku RC:
Plik RC naszego projektu jest na dobrą sprawę spisem wszystkich plików wchodzących w skład naszej strony wraz z identyfikatorami, jakich będziemy używać w programie w celu odniesienia się do zasobów.
Format zapisu w naszym pliku jest następujęcy:
#define HTML 23 /*definiuje identyfikator typu zasobu*/
HTML_INDEX HTML "html2\index.html"
...
...
...
kolumna 1: identyfikator zasobu (w ten sposób będziemy się odnosić do tego zasobu z programu)
kolumna 2: typ zasobu
kolumna 3: plik, który chcemy dołączyć do zasobów
3. Zmiana odnośników na stronie:
Teraz czeka nas żmudna robota. Otwieramy kolejno wszystkie pliki z rozszerzeniami *.html i *.css z katalogu html2 i zamieniamy występujące tam odnośniki do plików na odpowiadający im identyfikatory z pliku RC. I tak, jeśli mamy w pliku index.html:
<img alt="" src="..\obrazki\del7ko.jpg" border="0" height="236" width="181">
musimy ją zmienić na:
<img alt="" src=JPG_DEL7KO border="0" height="236" width="181">
4. Kompilacja zasobów
Kompilujemy teraz nasz plik RC do pliku zasobów *.res. Z linii komend wpisujemy:
BRCC32 -fo"html.res" html.rc
5. Użycie zasobów i webbrowsera w programie
Utwórzmy nowy projekt w delphi. Jedynym komponentem użytym w nim będzie WebBrowser.
- w sekcji interface dodajemy linijkę:
const
RT_HTML = MakeIntResource(23);
- w sekcji implementation dodajemy linijkę:
{$Resource html.res}
W ten sposób dołączyliśmy do naszego programu plik html.res zawierający całą stronę wraz z grafikami. Pozostaje nam jeszcze tylko ją odczytać ;) .
Zapewne wszyscy się już spotkali z adresami internetowymi zaczynającymi się od:
http://, ftp:// itd. Oznaczają one protokół z jakiego będziemy korzystać w przeglądarce. I tu niespodzianka. Taki adres może się zaczynać od res:// - czyli protokół pozwalający odczytać coś z zasobów. Teoretycznie, jeśli chcemy odczytać naszą stronę startową z zasobów powinniśmy zbudować adres dla webbrowsera w następujący sposób:
'res://' + Nazwa naszej aplikacji + '/' + Identyfikator zasobu
Niestety w windowsie możemy otrzymać taki adres:
res//c:\program files\program.exe/HTML_INDEX
Musimy go zatem zamienić na poprawną postać. Służy do tego funkcja ResURLEncode:
function ResURLEncode(Res: string): string;
var
x: Integer;
begin
Res := Application.ExeName + '/' + Res;
Result := '';
for x := 1 to Length(Res) do
begin
if Res[x] in ['A'..'Z', 'a'..'z', '0'..'9', '-', '_', '.', '/'] then
Result := Result + Res[x]
else
Result := Result + '%' + IntToHex(Ord(Res[x]), 2);
end;
Result := 'res://' + Result;
end;
Pozostaje nam załadować naszą stronę z zasobów do webbrowser'a;
WebBrowser.Navigate(ResURLEncode('HTML_INDEX'));
PS.
'res://' + Nazwa naszej aplikacji + '/' + Identyfikator zasobu
Ale przecież na naszej aplikacji świat się nie kończy i można wykorzystać:
'res://' + Jakikolwiek plik posiadający zasoby + '/' + Identyfikator zasobu
Zobacz też: