Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Builder Чтение данных из файла и добавление их на форму http://www.cyberforum.ru/cpp-builder/thread49865.html
Здравствуйте. Нужно открыть текстовый файл, найти слово "Дата", и цыфры, следующие за словом добавить в поле Едит. Пока могу только открыть файл, дальше никак не получается. void __fastcall...
C++ Builder Как на печатной форме сделать прерывистую линию?
Господа! Надо в QuickReport нарисовать прерывистые линии, точками, разной ширины. Как воплотить? Пробовал рисовать цветом и в настройках принтера ковыряться, не сходится. Образец приложил, надо...
Вычислить и вывести на экран в виде таблицы значения функции F на интервале C++ Builder
Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач, до Хкон. с шагом dХ ......../ a- _ х_ при х<0 и b не равно 0 ....../ 10+b F={ ...
C++ Builder Помогите сделать задачки! По с++ Не понимаю эту программу, плиз 1. Даны два числа. Если квадратный корень из второго числа меньше первого числа, то увеличить второе число в пять раз. 2. Вывести на экран все целые числа от А до... http://www.cyberforum.ru/cpp-builder/thread49845.html
C++ Builder GPS эмулятор http://www.cyberforum.ru/cpp-builder/thread49824.html
Уважаемые гуру и не только. Помогите написать эмулятор GPS. Очень надо. Какие коипоненты лучше использовать? Пробовал ZylNMEAGenerator, но почему-то не хочет эмулировать.
C++ Builder Переход на форме по TAB между компонентами
Суть в чём, есть у меня на форме несколько Edit и что бы на каждый не щёлкать мышью, хочу сделать переход по TAB, такой переход и так работает, но между компонентами переходит не так как мне нужно.
В StringGrid и Edit разрешить ввод только чисел C++ Builder
Нужна помошь, есть два элемента StringGrid и Edit, я хочу сделать так, что бы в них можно было вводить только цифры. Понимаю можно было сделать так, что бы выводилась ошибка, аля нельзя так. Но я...
C++ Builder idHTTP Здравствуйте! Подскажите пожалуйста как работать с этим компонентом? Мне нужно отправить POST запрос на сайт (php) и получить xml Вот например отправляю: IdHTTP1->POST Но как получить не знаю... http://www.cyberforum.ru/cpp-builder/thread49800.html
C++ Builder Копировать участок канвы. http://www.cyberforum.ru/cpp-builder/thread49778.html
Нужно чтобы рамкой управляемой стрелками копировался участок холста и этот участок отображался где нибудь в другом месте например под рисунком. Вроде для этого используется класс Tcanvas св-во...
C++ Builder [C++ Error] Unit1.cpp(19): E2316 '_fastcall TForm1::finClick(TObject *)' is not a member of 'TForm1' Не бейте ногами;-) Обработчик кнопки "fin" выдает ошибку Unit1.cpp(19): E2316 '_fastcall TForm1::finClick(TObject *)' is not a member of 'TForm1' Я какую-то библиотеку не подключил? #include... http://www.cyberforum.ru/cpp-builder/thread49737.html
oxotnik
1639 / 1110 / 77
Регистрация: 21.08.2008
Сообщений: 4,680
Записей в блоге: 1
Завершенные тесты: 1
07.09.2009, 12:01 0

Получение форматированной HTML-страницы

07.09.2009, 12:01. Просмотров 6338. Ответов 12
Метки (Все метки)

Ответ

жаль что ссылки запрещены, придется копипастить:

3. Как скачать файл из Инета?

Ответ ================================================

3.1. Вариант 1.
Можно возпользоваться компонентом TIdHTTP с вкладки Indy. Данные компоненты входят в поставку BCB начиная с версии 6.0. Для более ранних версий BCB их можно скачать с оффсайта разработчика: INDY


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
void __fastcall TMainForm::GetBtnClick(TObject *Sender)
{
TFileStream* fs;
 
int ReadByte=0;
int ReadBlock=0;
int NewReadBlock=ReadBlockEd->Text.ToInt();
bool Done=false;
 
String File=FileEd->Text;
String URL = URLEd->Text;
 
IdHTTP1->Request->ProxyPassword = PasswordEd->Text;
IdHTTP1->Request->ProxyServer = "ps.proxy.ru";
IdHTTP1->Request->ProxyPort = 3128;
IdHTTP1->Request->ProxyUsername = UserEd->Text;
 
//если файл ранее уже закачивался...
if(ini->SectionExists(URL)) {
ReadByte = ini->ReadInteger(URL, "ReadByte", 0);
Done = ini->ReadBool(URL, "Done", true);
if(Done) {
ShowMessage(String("Файл закачен полностью. Размер - ") + ReadByte + String(" байт."));
return;
}
ReadBlock = ini->ReadInteger(URL, "ReadBlock", 0);
ReadBlock = (ReadBlock == NewReadBlock)? ReadBlock:NewReadBlock;
File = ini->ReadString(URL, "File", 0);
 
TFileStream* fs = new TFileStream(File, fmOpenWrite);
fs->Position = ReadByte;
IdHTTP1->Request->ContentRangeStart = ReadByte;
IdHTTP1->Request->ContentRangeEnd = ReadByte + ReadBlock;
IdHTTP1->Get(URL, fs);
 
if(IdHTTP1->Request->ContentRangeEnd > IdHTTP1->Response->ContentRangeEnd) {
ini->WriteInteger(URL, "ReadByte", IdHTTP1->Response->ContentLength + IdHTTP1->Response->ContentRangeStart);
ini->WriteInteger(URL, "ReadBlock", ReadBlock);
//ini->WriteString(URL, "File", File);
ini->WriteInteger(URL, "Done", true);
}
else {
ini->WriteInteger(URL, "ReadByte", ReadByte + ReadBlock);
ini->WriteInteger(URL, "ReadBlock", ReadBlock);
//ini->WriteString(URL, "File", File);
ini->WriteInteger(URL, "Done", false);
}
 
delete fs;
}
else {
TFileStream* fs = new TFileStream(File, fmCreate);
 
fs->Position = ReadByte;
IdHTTP1->Request->ContentRangeStart = ReadByte;
IdHTTP1->Request->ContentRangeEnd = ReadByte + NewReadBlock;
IdHTTP1->Get(URL, fs);
 
if(IdHTTP1->Request->ContentRangeEnd > IdHTTP1->Response->ContentRangeEnd) {
ini->WriteInteger(URL, "ReadByte", IdHTTP1->Response->ContentLength + IdHTTP1->Response->ContentRangeStart);
ini->WriteInteger(URL, "ReadBlock", NewReadBlock);
ini->WriteString(URL, "File", File);
ini->WriteInteger(URL, "Done", true);
}
else {
ini->WriteInteger(URL, "ReadByte", ReadByte + NewReadBlock);
ini->WriteInteger(URL, "ReadBlock", NewReadBlock);
ini->WriteString(URL, "File", File);
ini->WriteInteger(URL, "Done", false);
}
 
delete fs;
}
}
3.2. Вариант 2.
Воспользоваться функциями WinInet. Необходимо включить хедер wininet.h и подключить к проекту файл $(BCB)\LIB\PSDK\wininet.lib


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char szUrl[] = "http://www.codenet.ru";
//String Page;
 
HINTERNET hInternet = InternetOpen("MY AGENT",
INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
 
HINTERNET hRequest = InternetOpenUrl(hInternet, szUrl, NULL, 0, 0, 0);
 
if(hRequest)
{
DWORD dwRead;
char szTemp[1024];
TFileStream* fs = new TFileStream(ExtractFilePath(Application->ExeName) + "\\Page.html", fmCreate);
while (InternetReadFile(hRequest, (LPVOID)szTemp, 1024, &dwRead))
{
if (!dwRead) break;
fs->Write(szTemp, dwRead);
//Page = Page + String(szTemp);
}
delete fs;
}
 
InternetCloseHandle(hRequest);
InternetCloseHandle(hInternet);
}
3.3 Вариант 3.
Непосредственно юзать WinSock API. Например скачиваем страницу и помещаем ее содержимое в Memo.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
//Winsock API
char request[]=
"GET / HTTP/1.0\r\n\
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\r\n\
Accept-Language: ru\r\n\
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)\r\n\
Host: www.codenet.ru\r\n\r\n";
 
#define MAX_PACKET_SIZE 4096 
 
void __fastcall TForm1::Button3Click(TObject *Sender)
{
WSADATA ws; 
SOCKET s;
sockaddr_in adr;
hostent* hn;
char buff [MAX_PACKET_SIZE];
// Init
if (WSAStartup (0x0101, &ws) != 0)
{
// Error
return;
}
// Создаем сокет
if (INVALID_SOCKET == (s = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP) ) )
{
// Error
return;
}
 
// получаем ИП
if (NULL == ( hn = gethostbyname ("www.yandex.ru") ) )
{
// Error
return;
}
 
// Заполгняем структуру
adr.sin_family = AF_INET;
adr.sin_addr.S_un.S_addr = *(DWORD* ) hn->h_addr_list[0];
adr.sin_port = htons (80);
 
// Устанавливаем соединение
if (SOCKET_ERROR == connect (s, (sockaddr* )&adr, sizeof (adr) ) )
{
// Error
return;
}
 
// Посылаем запрос
if (SOCKET_ERROR == send (s, request, strlen(request), 0) )
{
// Error
return;
}
 
// Принимаем данные
int len;
do
{
if (SOCKET_ERROR == (len = recv (s, (char *) &buff, MAX_PACKET_SIZE, 0) ) )
return;
Memo1->Lines->Add(buff);
}
while (len!=0);
 
 
/*int len = recv (s, (char *) &buff, MAX_PACKET_SIZE, 0);
 
if ( (len == SOCKET_ERROR) || (len == 0) )
{
// Error
return ;
}
 
// Выводим полученное
Memo1->Lines->Add(buff);*/
// Cae?uaaai niaaeiaiea
if (SOCKET_ERROR == closesocket (s) )
{
// Error
return ;
} 
 
}
3.4. И самый простой вариант.
Воспользоваться ф-ией URLDownloadToFile. Необходимо включить хедер urlmon.h и подключить к проекту файл $(BCB)\LIB\PSDK\urlmon.lib

C++
1
URLDownloadToFile( 0, "http://www.yandex.ru", "c:\\temp\myfile.html", 0, 0);


Вернуться к обсуждению:
Получение форматированной HTML-страницы
1
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2009, 12:01

вставка html страницы в с++ .Как?
Так народ нужна помощь, делаю учебник на с++, встал вопрос, как подрубить html страницы в с++ Кто...

Отображение HTML-страницы в приложении
есть ли в борланде какое-либо окошко в которое можно подключить html документ, и при запуске этой...

Сохранение HTML кода страницы.
Как можно без TWebBrowser сохранить HTML код WEB страницы?

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru