<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Языки программирования скачать &#187; CppWebBrowser</title>
	<atom:link href="http://about-programming.ru/tag/cppwebbrowser/feed" rel="self" type="application/rss+xml" />
	<link>http://about-programming.ru</link>
	<description>Все о программировании - языки программирования скачать (Basic, C, C++, C#, Delphi, Pascal, Java, PHP)</description>
	<lastBuildDate>Mon, 19 Jul 2010 16:44:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Особенности копирования текста страницы в CppWebBrowser на C++ Builder</title>
		<link>http://about-programming.ru/ccc/586.html</link>
		<comments>http://about-programming.ru/ccc/586.html#comments</comments>
		<pubDate>Sat, 02 Jan 2010 14:05:41 +0000</pubDate>
		<dc:creator>evteev</dc:creator>
				<category><![CDATA[C/C++/C#]]></category>
		<category><![CDATA[CppWebBrowser]]></category>

		<guid isPermaLink="false">http://about-programming.ru/?p=586</guid>
		<description><![CDATA[В интернете выложено несколько похожих способов копирования текста (ну или html-текста, не суть) с компоненты CppWebBrowser. Я использовал следующий рабочий вариант копирования html-текста в Memo: IHTMLDocument2 *HTMLDocument = NULL; IPersistFile *PersistFile = NULL; LONG ilFramesCount = 0; AnsiString slTmpFileExtension = ".html"; // Falls eine Seite geladen: if(!Form1->CppWebBrowser1->Busy &#038;&#038; Form1->CppWebBrowser1->Document &#038;&#038; AnsiString(Form1->CppWebBrowser1->LocationURL) != "about:blank" &#038;&#038; SUCCEEDED(Form1->CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument2, [...]]]></description>
			<content:encoded><![CDATA[<p>В интернете выложено несколько похожих способов копирования текста (ну или html-текста, не суть) с компоненты <strong><a href="http://about-programming.ru/tag/cppwebbrowser">CppWebBrowser</a></strong>.<br />
Я использовал следующий рабочий вариант копирования html-текста в Memo:<span id="more-586"></span></p>
<p><code><br />
IHTMLDocument2 *HTMLDocument = NULL;<br />
IPersistFile *PersistFile = NULL;<br />
LONG ilFramesCount = 0;<br />
AnsiString slTmpFileExtension = ".html";<br />
// Falls eine Seite geladen:<br />
if(!Form1-><strong>CppWebBrowser</strong>1->Busy &#038;&#038; Form1-><strong>CppWebBrowser</strong>1->Document &#038;&#038;<br />
AnsiString(Form1-><strong>CppWebBrowser</strong>1->LocationURL) != "about:blank" &#038;&#038;<br />
SUCCEEDED(Form1-><strong>CppWebBrowser</strong>1->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&#038;HTMLDocument)))<br />
{<br />
// HTML-Code des Hauptdokuments speichern:<br />
       if(SUCCEEDED(HTMLDocument->QueryInterface(IID_IPersistFile,(LPVOID*)&#038;PersistFile)))<br />
       {<br />
               // HTML-Code des Hauptdokuments speichern:<br />
               PersistFile->Save(WideString(String(ExtractFilePath(ParamStr(0))+"0"+slTmpFileExtension)), false);<br />
               PersistFile->Release();<br />
               // ggf. auch Frames-Code extrahieren:<br />
               IHTMLFramesCollection2 *pFrames = NULL;<br />
               if(SUCCEEDED(HTMLDocument->get_frames(&#038;pFrames)))<br />
               {<br />
               // Anzahl der Frames bestimmen:<br />
               pFrames->get_length(&#038;ilFramesCount);<br />
               if(ilFramesCount < 2) ilFramesCount= 0;<br />
               VARIANT vFrame;<br />
               VARIANT ret;<br />
               vFrame.vt = VT_UINT;<br />
               // f?r jedes Frame:<br />
               for(LONG ilFrameIndex = 0; ilFrameIndex < ilFramesCount; ilFrameIndex++)<br />
               {<br />
                       vFrame.lVal = ilFrameIndex;<br />
                       if(SUCCEEDED(pFrames->item(&#038;vFrame, &#038;ret)))<br />
                       {<br />
                               // Zeiger auf IHTMLWindow2 des Frames besorgen:<br />
                               IHTMLWindow2 *pWindow = NULL;<br />
                               if(SUCCEEDED(ret.pdispVal->QueryInterface(IID_IHTMLWindow2,<br />
                               (LPVOID*)&#038;pWindow)))<br />
                               {<br />
                                       // Zeiger auf IHTMLDocument2 des Frames besorgen:<br />
                                       IHTMLDocument2 *pDoc = NULL;<br />
                                       if(SUCCEEDED(pWindow->get_document(&#038;pDoc)))<br />
                                       {<br />
                                               // Frame in der Datei "Framenummer.html" speichern:<br />
                                               IPersistFile *PersistFile = NULL;<br />
                                               if(SUCCEEDED(pDoc->QueryInterface(IID_IPersistFile,<br />
                                               (LPVOID*)&#038;PersistFile)))<br />
                                               {<br />
                                                       PersistFile->Save(WideString(String(ExtractFilePath(ParamStr(0))+<br />
                                                       IntToStr(ilFrameIndex+1) + slTmpFileExtension)), false);<br />
                                                       PersistFile->Release();<br />
                                               }<br />
                                               pDoc->Release();<br />
                                       }<br />
                                       pWindow->Release();<br />
                               }<br />
                       }<br />
               }<br />
               pFrames->Release();<br />
       }<br />
}<br />
HTMLDocument->Release();<br />
TStringList* pFileStrings = new TStringList;<br />
if(pFileStrings)<br />
{<br />
// Die gepufferten Dateien mit dem HTML-Code der<br />
// Seite in die RichEdit einlesen und die Dateien l?schen:<br />
       if(FileExists(ExtractFilePath(ParamStr(0))+"0"+slTmpFileExtension))<br />
               {<br />
                       Form1->Memo1->Lines->LoadFromFile(ExtractFilePath(<br />
                       ParamStr(0))+"0"+slTmpFileExtension);<br />
                       DeleteFile(ExtractFilePath(ParamStr(0))+"0"+slTmpFileExtension);<br />
               }<br />
       if(ilFramesCount > 0)<br />
               {<br />
               for(LONG ilFrameIndex = 0; ilFrameIndex < ilFramesCount; ilFrameIndex++)<br />
                       {<br />
                               if(FileExists(ExtractFilePath(ParamStr(0))+IntToStr(<br />
                               ilFrameIndex+1) + slTmpFileExtension))<br />
                               {<br />
                                       pFileStrings->LoadFromFile(ExtractFilePath(ParamStr(0))+<br />
                                       IntToStr(ilFrameIndex+1) + slTmpFileExtension);<br />
                                       Form1->Memo1->Lines->Add("\n- - - Frame " +<br />
                                       IntToStr(ilFrameIndex+1) + " - - -");<br />
                                       Form1->Memo1->Lines->Add(pFileStrings->Text);<br />
                                       DeleteFile(ExtractFilePath(ParamStr(0))+IntToStr(<br />
                                       ilFrameIndex+1) + slTmpFileExtension);<br />
                               }<br />
                       }<br />
               }<br />
       delete pFileStrings;<br />
       }<br />
}<br />
else Form1->Memo1->Lines->Clear();<br />
</code></p>
<p>Проблема в следующем&#8230; Текст извлекаю из известного сайта vkontakte.ru. Предположим, захожу в поиск людей.. мне выводится несколько страниц, к примеру по 10 человек. Копирую текст для первых 10 &#8211; всё Ок. А вот если хочу скопировать текст для следущих 10 найденных, то копируется текст снова для первых 10 В код копирования страницы не вникал ибо не особо в этих приёмах разбираюсь, а если начну разбираться то уйдёт на это много времени&#8230;<br />
Вопрос в следующем: можно как-нибудь подправить этот код или может, кто в работе с html страницами хорошо разбирается, предложит свой вариант для решения проблемы?</p>
<hr />
<p><code>AnsiString GetAllTextFromWebPage(TCppWebBrowser *wb)<br />
{<br />
        AnsiString s = wb->OleObject.OlePropertyGet("Document").OlePropertyGet("Body").OlePropertyGet("InnerText");<br />
        return s;<br />
}</code><br />
Сам на днях перерыл много инфы, ни чего толком не нашел, но пришел к такому изяществу, через COM-объект получаешь весь текст на странице<br />
Если нужен HTML код странице, меняешь только значение переменной, кажется так, пробуй:<br />
<code>AnsiString GetHTMLTextFromWebPage(TCppWebBrowser *wb)<br />
{<br />
        AnsiString s = wb->OleObject.OlePropertyGet("Document").OlePropertyGet("Body").OlePropertyGet("InnerHtml");<br />
        return s;<br />
}</code></p>
<hr />
<p>Проблема в том, что в цикле браузер не успевает загрузить содержимое страницы и на этом этапе возникает ошибка доступа. Все решиться если знать как дождаться определенного события = загрузки страницы, и только после этого запускать остальные фунциии цикла, стоит вопрос, как это сделать?</p>
<p>Проблема решается  следущим образом, в теле цикла где происходит обработка страницы пишем сразу после того как браузер получает адрес страницы <a href="http://about-programming.ru/tag/cppwebbrowser">CppWebBrowser</a>->Navigate2(URL)</p>
<p><code>while (CppWebBrowser->ReadyState != 4)<br />
{<br />
  Application->ProcessMessages();;<br />
}</code></p>
<blockquote><p><strong>Похожая статья:</strong><br />
<a href="http://about-programming.ru/ccc/586.html">Особенности копирования текста страницы в CppWebBrowser на C++ Builder</a></p></blockquote>
<p>Мой блог о программировании находят по следующим фразам</p>
<ul>
<li><a href="http://about-programming.ru">Все о программировании</a></li>
<li><a href="http://about-programming.ru">языки программирования скачать</a></li>
<li><a href="http://about-programming.ru/category/php.html">язык PHP</a></li>
<li><a href="http://about-programming.ru/category/php.html">php программирование</a></li>
<li><a href="http://about-programming.ru">языки программирования скачать</a></li>
<li><a href="http://about-programming.ru/category/assembler.html">язык программирования assembler</a></li>
<li><a href="http://about-programming.ru/category/delphipascal.html">программирование на pascal</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://about-programming.ru/ccc/586.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Пишем браузер на С++Builder</title>
		<link>http://about-programming.ru/ccc/582.html</link>
		<comments>http://about-programming.ru/ccc/582.html#comments</comments>
		<pubDate>Sat, 02 Jan 2010 13:56:28 +0000</pubDate>
		<dc:creator>evteev</dc:creator>
				<category><![CDATA[C/C++/C#]]></category>
		<category><![CDATA[CppWebBrowser]]></category>

		<guid isPermaLink="false">http://about-programming.ru/?p=582</guid>
		<description><![CDATA[Продолжаю тему клонирования программ darkamster&#8217;a на Delphi в С++Builder. В этой статье я покажу, как с помощью стандартных компонентов, можно создать свой браузер. Браузер будет на движке &#8216;всеми-любимого&#8217; InternetExplorer. Наш зверь сможет ходить по URL, смотреть Html странички, ходить вперед и назад, конечно, перезагружать странички и останавливать загрузку. Начнем новый проект. Советую сразу определиться с [...]]]></description>
			<content:encoded><![CDATA[<p>Продолжаю тему клонирования программ darkamster&#8217;a на Delphi в <strong>С++Builder</strong>. В этой статье я покажу, как с помощью стандартных компонентов, можно создать свой браузер. Браузер будет на движке &#8216;всеми-любимого&#8217; InternetExplorer. Наш зверь сможет ходить по URL, смотреть Html странички, ходить вперед и назад, конечно, перезагружать странички и останавливать загрузку.<span id="more-582"></span><br />
Начнем новый проект. Советую сразу определиться с дизайном программы, не стоит далеко отходить от принятых стандартов, т.е кнопки навигации вверху, чуть ниже поле для ввода адреса URL, под ними будет располагаться просмотровщик страниц (компонент <strong><a href="http://about-programming.ru/tag/cppwebbrowser">CppWebBrowser</a></strong>).</p>
<p><img class="aligncenter" title="Пишем браузер" src="http://i-faq.ru/uploads/posts/2007-09/1190994432_builder1.jpg" alt="" width="231" height="144" />Я вместо button использовал компонент panel (это моя задумка &#8211; во время наведения курсора панелька будет подсвечена, как это реализовать я напишу в самом конце). Под навигацией у меня располагается Edit для ввода адреса, под ним компонент <strong><a href="http://about-programming.ru/tag/cppwebbrowser">CppWebBrowser</a></strong>, так же нам понадобиться компонент OpenDialod &#8211; для просмотра страничек с жесткого диска. Итак, впервую очередь мы распишем событие, совершаемое при нажатии enter в edit (с учетом того, что пользователь указал адрес сайта, событие называется &#8211; OnKeyPress). Вот код:</p>
<p><code>if (Key == VK_RETURN){ // нажат ЕНТЕР<br />
wchar_t URL[100];<br />
Edit1-&gt;Text.WideChar(URL,100); //Edit1 принял адрес сайта<br />
<strong>CppWebBrowser</strong>-&gt;Navigate(URL,0,NULL,NULL,NULL); //Адрес направлен на <strong>cppwebbrowser</strong>, пошла загрузка<br />
}</code></p>
<p>Далее напишем код для кнопки открыть:</p>
<p><code>OpenDialog1-&gt;Execute(); //Открываем окно выбора файлов<br />
wchar_t URL[100];<br />
Edit1-&gt;Text=(OpenDialog1-&gt;FileName); //Присваемаем Edit название выбраного файла<br />
Edit1-&gt;Text.WideChar(URL,100);<br />
<strong>CppWebBrowser</strong>-&gt;Navigate(URL,0,NULL,NULL,NULL);</code></p>
<p>Кнопка назад:</p>
<p><code><strong>CppWebBrowser</strong>-&gt;GoBack();</code></p>
<p>Кнопка вперед:</p>
<p><code><strong>CppWebBrowser</strong>-&gt;GoForward();</code></p>
<p>Кнопка стоп:</p>
<p><code><strong>[block]2[/block]</strong>-&gt;Stop();</code></p>
<p>Кнопка Обновить:</p>
<p><code><strong>[block]3[/block]</strong>-&gt;Refresh();</code></p>
<p>Все готово =) Браузер будет спокойно бороздить просторы инета, под вашим чутким контролем. Теперь я распишу то, как менять цвет панелек при наведении. Итак, для начала обговорим, что стандартным цветом наших panel будет &#8211; clBtnFace. Теперь ставим на OnMouseMove, следующий код:</p>
<p><code>Panel1-&gt;Color=clSkyBlue; //я выбрал цвет - небесно синий</code></p>
<p>В результате чего, при наведии панель поменяет цвет, теперь заставим вернуть ее преждний цвет (если пользователь убрал мышь). Сперва, мы должны выбрать событие OnMouseMove для Form1 и теперь пишем код:</p>
<p><code>Panel1-&gt;Color=clBtnFace; //результат панель приняла стандартный цвет</code></p>
<p>Мой блог о программировании находят по следующим фразам</p>
<ul>
<li><a href="http://about-programming.ru">Все о программировании</a></li>
<li><a href="http://about-programming.ru">языки программирования скачать</a></li>
<li><a href="http://about-programming.ru/category/php.html">язык PHP</a></li>
<li><a href="http://about-programming.ru/category/php.html">php программирование</a></li>
<li><a href="http://about-programming.ru">языки программирования скачать</a></li>
<li><a href="http://about-programming.ru/category/assembler.html">язык программирования assembler</a></li>
<li><a href="http://about-programming.ru/category/delphipascal.html">программирование на pascal</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://about-programming.ru/ccc/582.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
