Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Не осилил стока буков. Предложу своё. Значит (+)

Отправлено uni 25 ноября 2007 г. 01:28
В ответ на: Вопросик про HTTP под Виндами отправлено <font color=gray>хххх</font> 24 ноября 2007 г. 21:28

приделывание IE для своего локального пользования в качестве простого компонента, по-моему, есть не тривиальная задача, хотя бы потому, что сам IE заточен для работы по сети. Вот в общем и всё о нём. Кое-что инетересное можно почерпнуть из программы RSDN@HOME, где он (броузер) как раз используется в локальной проге для отображения сообщений из базы. Но там IE используется по прямому назначению - просмотр HTML страниц. В общем сложно прицепиться к сообщениям IE и сделать для него оболочку... я пытался, пока толком его ещё не освоил, поэтому я пошёл другим путём, менее красивым, но, думаю, возможно Вам подходящим.

Вам же нужно только HTML управление? Так? Т.е. Вы от прибора получаете диалоговую форму запроса в воде html-тегов, скриптов и форм. Если их не получается отображать с помощью IE, есть ли что-то на него похожее? Да, есть. Сторонние компоненты. Если Вы не ведёте религиозных войн на чём писать, то могу Вам предложить компоненты, почти аналогичные IE, но имеющие преимущество: они содержат уже готовые свойства-обработчики событий - это раз, второе - поддерживают отображение HTML кода, это два.

Я пользовался таким компонентом - THTMLViewer, по-моему, он есть и для C++ Builder'а и для Delphi. Там есть такие события:
OnFormSubmit();
OnBitmapRequest();
OnFileBrowse();
OnScript();
OnLink()

и далее в том же духе. Я пользовался OnFormSubmit когда писал для этого форума клиент наподобии RSDN@Home. Вот как выглядел обработчик в одной их версий:

procedure TFormNewMessage.htmlViewerFormSubmit(Sender: TObject; const Action,
Target, EncType, Method: String; Results: TStringList);
var
V: TStringList;
i: integer;
// Response: TStringStream;
begin
{ Response := TStringStream.Create('');
try
HTTP.Post('http://www.telesys.ru/cgi-bin/boardnew.pl', Results, Response);
// Viewer.LoadFromStream(Response);
finally
Response.Free;
end;}
{
NMHTTP1.InputFileMode := FALSE;
NMHTTP1.OutputFileMode := FALSE;
NMHTTP1.ReportLevel := Status_Basic;
NMHTTP1.Host := 'www.telesys.ru';
NMHTTP1.Port := 80;
With NMHTTP1.HeaderInfo do
Begin
Cookie := '';
LocalMailAddress := '';
LocalProgram := '';
Referer := '';
UserID := '';
Password := '';
End;
V := TStringList.Create;
NMHTTP1.Post('http://www.telesys.ru/cgi-bin/boardnew.pl', Results.Text);
// Memo3.Text := NMHTTP1.Header;
V.Text := NMHTTP1.Body;
Viewer.LoadStrings(V);
V.Free;
}
{
NMHTTP1.InputFileMode := FALSE;
NMHTTP1.OutputFileMode := FALSE;
NMHTTP1.ReportLevel := Status_Basic;
If CheckBox1.Checked then
Begin
NMHTTP1.Proxy := Edit11.Text;
NMHTTP1.ProxyPort := StrToInt(Edit12.Text);
End;
With NMHTTP1.HeaderInfo do
Begin
Cookie := Edit5.Text;
LocalMailAddress := Edit6.Text;
LocalProgram := Edit7.Text;
Referer := Edit8.Text;
UserID := Edit9.Text;
Password := Edit10.Text;
End;
NMHTTP1.Post(Edit2.Text, Memo6.Lines[0]);
Memo3.Text := NMHTTP1.Header;
Memo4.Text := NMHTTP1.Body;
}
SendData := Results;
V := TStringList.Create;
V.Text := ExtractForm(Results.Text, '(?m)^(.*?)=');
SendData.Text := ExtractForm(Results.Text, '(?m)=(.*?)$');
for i := 0 to SendData.Count - 1 do
begin
SendData[i] := MidStr(SendData[i], 2, Length(SendData[i]));
SendData[i] := V[i] + HTTPEncode(SendData[i]) + '&';
end; // for
V.Free;
nMethod := 1;
ReceiveData.Clear;

// if ClientSocket1.Active then ClientSocket1.Active := false;
// ClientSocket1.Active := True;

// OpenURL('');
}
end;


Здесь я модифицировал строку параметров, передаваемую в методе GET, т.к. русский текст при передаче нужно кодировать. Здесь я самостоятельно обращаюсь к серверу Телесисов, а Вы можете самостоятельно обращаться, хоть марсианам. Потом, когда от марсиан пришёл ответ, мы загружаем его в компонент Viewer.LoadStrings(V);

//-----------------------
Резюмирую. Использовать чужой компонент. Компонент должен поддерживать отображение HTML кода, скриптов и прочую лабуду. Иметь возможность реагировать на типовые события при http транзакциях. В обработчике реализуйте свой протокол. Компонент не должен иметь свойств для прямой работы по протоколу http - должна быть просто оболочка для рисования кода html.

Как Вам такой подход? Не нужны никакие spip'ы, telnet'ы (упаси боже), почтовые ящики, именованные каналы, добавления своих протоколов в систему (даже не в курсах как это делается :) )

Я бы делал именно так. А хардкорное программирование винды оставил бы SM'у и остальным советчикам, они походу профи.



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
если прибавить четыре к четырём будет:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru