Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > Имитация HTTP сервера


Автор: azbook 23.5.2006, 16:45
Приложение имитирует Web-сайт. В ответ на действия пользователя генерируется страничка и отображается компонентом TWebBrowser. Дурацкий вопрос - как это сделать? Можно конечно создавать каждый раз файл и на него указать методу Navigate. Можно запустить локально Веб-сервер или встроить веб-сервер в приложение и обращаться по http-протоколу. Есть ли альтернативы? Что то типа вывода непосредственно в браузер, как это делает Http-сервер, но без использования последнего. 
Связанный с этим вопрос - на генерируемой страничке есть ссылки. Как сделать ссылку "на себя?". Т.е.что-то типа
protokol://application.exe?parametrs, чтобы по щелчок по ссылке обрабатывало то же самое приложение. Лично мне ничего умнее в голову не приходит, чем в обработчике OnBeforeNavigate анализировать ссылку, создавать временной файл и туда писать созданную страницу. Т.е. все ссылки имеют вид "temp.html?param1=val1&param2=val2....". Уродливо как-то получается. Просьба имеющим что сказать по данному поводу не стесняться отвечать подробно, на уровне "для полного чайника" (Первую и последню прогу на Делфи писал 10 лет назад, HelloWorld.exe называлась).  

Автор: Snowy 23.5.2006, 16:53
Цитата(azbook @  23.5.2006,  16:45 Найти цитируемый пост)
 Что то типа вывода непосредственно в браузер, как это делает Http-сервер, но без использования последнего. 
В разделе по ActiveX есть примеры загрузки из TMemoryStream.


Цитата(azbook @  23.5.2006,  16:45 Найти цитируемый пост)
Лично мне ничего умнее в голову не приходит, чем в обработчике OnBeforeNavigate анализировать ссылку
Так и делать.

Цитата(azbook @  23.5.2006,  16:45 Найти цитируемый пост)
Т.е. все ссылки имеют вид "temp.html?param1=val1&param2=val2....". Уродливо как-то получается.
Можешь передавать данные через POST запрос. Тогда не видно будет.

Добавлено @ 16:57 
Процедура для загрузки html страницы в TWebBrowser.
Код
procedure LoadHtml(wb: TWebBrowser; html: string);
var ms: TMemoryStream;
begin
  ms:=TMemoryStream.Create;
  ms.Write(html[1], Length(html));
  ms.Position:=0;
  try
    while wb.ReadyState < READYSTATE_INTERACTIVE do
      Application.HandleMessage;
    (wb.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
  finally
    ms.Free;
  end;
end;


Добавлено @ 17:02 
И еще. В FAQ много полезного на эту тему. Пригодится: http://forum.vingrad.ru/index.php?act=module&module=vingradfaq&section=787 

Автор: Демо 23.5.2006, 19:25
Мда. А  люди все разбрасывают везде по инету свои вопросы... 

Автор: azbook 24.5.2006, 16:17
Спасибо, это именно то, что нужно. Прошу извинить за невнимательное изучение ФАК)

Добавлено @ 16:20 
Цитата(Демо @ 23.5.2006,  19:25)
Мда. А  люди все разбрасывают везде по инету свои вопросы...

и более того, некоторые успевают везде их читать... smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)