Сегодня я раскажу как вставить HTML страницу в DLL. Пример будет продемонстрирован посредством использования Delphi 7.
Иногда возникает необходимость вставить ресурсы в DLL файл (например для предотвращения случайного удаление ресурса, или для того чтобы защитить ресурс от изменения).
Для начала создайте простую HTML страницу, для примера создайте страницу с одним изображением (в ресурс мы будем вставлять и изображение). Назовём этот файл index1.html. Ниже указано как мы будем получать доступ к изображению из html страници, HTML код выглядит следующим образом:
1: <HTML>
2: <HEAD>
3: <TITLE>My HTML</TITLE>
4: </HEAD>
5: <BODY>
6: This is a HTML in DLL<br>
7: <img src="MYIMG" width=100 height=100 border=0 alt="">
8: </BODY>
9: </HTML>
Теперь займемся файлом ресурсов. Необходимо создать новый текстовый файл в директории вашего проекта с расширением *.rc, назовем его например MyHTML.rc. После этого добавте следующие строки в файл MyHTML.rc. Обратите внимание название ресурса должно совпадать с именем файла (это из-за того что броузер не понимает такого расширения файла), за исключением того что точку brcc не понимает нужно поставить подчеркивание (позднее я обьясню что нужно делать с подчеркиванием)
index1_html (23) "index1.html"
MYIMG GIF "my.gif"
Следующий шаг - компиляция файла ресурса. Выполните следующую команду в директории Вашего проекта:
BRCC32 MyHTML.RC
Результатом выполнения команды будет собраный файл MyHTML.RES. Теперь заменим подчеркивание на точку в заголовке нашего собраного *.RES файла. Для этого нужно найти строку "i n d e x 1 _ h t m l", изаменить подчеркивание на точку. Теперь можно добавить собраный файл ресурса в Ваш проект, для этого добавьте следующую директиву компилятора в unit проекта:
{$R MyHTML.RES}
Далее собираем наш DLL. Чтобы запустить в браузере введите команду:
res://c:\myhtml.dll/index1.html
768efae5-3f3a-44cb-bd47-9f88d9060343|1|5.0

февраля 16, 2010 10:36 by
cya-st
Многии начинающие програмисты не знают о методе Application.ProcessMessage() и сталкиваются с проблемами, которых не могут объяснить. Например, мы хотим написать что-то на форме и через 5 секунд стереть. Нужно сделать так:
1: procedure TForm1.Button1Click(Sender: TObject);
2: begin
3: Label1.Caption:='Started';
4: Application.ProcessMessage;
5: Sleep(5000);
6: Label1.Caption:='Finished';
7: end;
Попробуйте убрать Application.ProcessMessage(), и вы никогда не увидете слова "Started". Это связано с тем, что Windows ждет, пока накопятся сообщения в очереди, а не обрабатывает их сразу. Application.ProcessMessage() заставляет обработать все сообщения, которые накопились в данный момент. Подробности можно найти в файлах справки.
Еще это можно применить так:
1: procedure TForm1.Button1Click(Sender: TObject);
2: var
3: i:integer;
4: begin
5: for i:=1 to 100000 do
6: begin
7: ProgressBar1.Position:=i;
8: Application.ProcessMessage;
9: end;
10: end;
Если убрать Application.ProcessMessage(), то, пока выполняетсяцикл, мы не сможем сдвинуть, свернуть форму, вывести ProgressBar1.
217815a3-df77-4bb3-9392-b7172cf68ebc|1|5.0