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

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

Пару off-вопросов (+)

Отправлено uni 06 мая 2007 г. 16:42


align=Top
Народ нужно чуть помочь слегка:
1) Не мог бы кто показать исходники работы по протоколу http посредством WinAPI на любом языке. Я уже перепробовал три компонента и один вариант с библиотекой WinInet. Первые варианты не устроили, т.к. мне нужен низкоуровневый доступ к пакетам, которые я передаю. Не смог я настроить эти долбанутые компоненты, кроме TClientSocket, то он тормознутый какой-то - соединяется с сервером только через пару секунд, а то и дольше. Очень не удобный у него приём. Хотелось бы посылать и принимать данные в одной процедуре.
Типа так:
function  ReadURL(fURL : WideString): WideString;
var
hInternet : pointer;
hConnect : pointer;
hRequest : pointer;

Size : cardinal;
B : boolean;
Buff : ANSIString;
ReadedSize : cardinal;
I, L : cardinal;
begin
result := '';

hInternet := OpenInternet('FDSC Informer');
hConnect := Connect(hInternet);
hRequest := NewRequest(fURL, hConnect);
if (NOT SendRequest(hRequest)) then
begin
// ShowBalloonHint('Error in FDSC Informer', 'FDSC Informer can not open Internet access', bitError);
// getlastError;
if hRequest <> nil then CloseURL(hRequest);
if hConnect <> nil then CloseURL(hConnect);
if hInternet <> nil then CloseURL(hInternet);
exit;
end;
SizeQuery(hRequest, Size);

inc(Size);
SetLength(Buff, Size);

B := false;

I := 1;
while true do
begin
DataAvailable(hRequest, L);
if L = 0 then break;
if (I + L) > Size then SetLength(Buff, I + L);
B := InternetReadFile(hRequest, @Buff[I], L, ReadedSize);
if NOT B then break;
inc(I, ReadedSize);
end;

Buff[I] := #0;

CloseURL(hRequest);
CloseURL(hConnect);
CloseURL(hInternet);
{$Ifdef FILE_DEBUG_OUTPUT}
SetFile('tmp.txt', 'error');
{$ENDIF}
if B then
begin
result := WideString(Buff);
{$Ifdef FILE_DEBUG_OUTPUT}
SetFile('tmp.txt', result);
{$ENDIF}
end else result := '';
end;


Но этот код у меня никак не захотел работать с локальным сервером даже и спотыкался на SendRequest(hRequest)). Достал гад. У некоторых компонентов кодирование типа HTTPEncode() происходит странно... в параметрах от формы знак "равно" тоже кодируется, что не верно. Дошёл до того, что решил сам WinSock пользовать, но там тоже не всё гладко. Хотелось бы обойти проблемы с "зависанием" проги при ожидании.

Вопрос2. На картинке по ссылке видна раскраска дерева. Может кто смекнёт как можно в зависимости от уровня листка подобрать цвет фона. Т.е. цвет задаётся так - RGB(nR, nG, nB) - вместо nR, nG и nB - нужно написать выражение с участием Level, чтобы выглядело покрасивше и читабельно.

Вопрос3: С помощью какой функции можно поубирать или декодировать выражения типа

>
и прочие, которые встречаются в html страницах? Темы у меня (видно внизу) не хорошо смотрятся без декодирования.

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

Ответы


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

Сообщение:

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

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

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

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