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:

  1. Przygotowanie strony
  2. Przygotowanie pliku RC
  3. Zmiana odnośników na stronie
  4. Kompilacja zasobów
  5. 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

RWeb.zip

Zobacz też:

0 komentarzy