<?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>Elsper &#187; софт</title>
	<atom:link href="http://elsper.ru/category/soft/feed/" rel="self" type="application/rss+xml" />
	<link>http://elsper.ru</link>
	<description>Заработок в интернете, форекс, психология и просто мысли.</description>
	<lastBuildDate>Thu, 02 Feb 2012 15:42:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Скопировать все файлы из дерева в одну папку.</title>
		<link>http://elsper.ru/2011/08/skopirovat-vse-fajly-iz-dereva-v-odnu-papku/</link>
		<comments>http://elsper.ru/2011/08/skopirovat-vse-fajly-iz-dereva-v-odnu-papku/#comments</comments>
		<pubDate>Sun, 28 Aug 2011 17:53:48 +0000</pubDate>
		<dc:creator>Elsper</dc:creator>
				<category><![CDATA[софт]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Скрипты]]></category>

		<guid isPermaLink="false">http://elsper.ru/?p=1357</guid>
		<description><![CDATA[Возникла тут у меня задача обработать 103943 файла расположенных в 2618 папках. И хотя у меня есть процедура для того чтобы получить список всех файлов задача требует чтобы все файлы были в одной папке. Ну раз требует, то сделаем. За основу взял ту же процедуру, что выложил по ссылке выше. Подумав немного получил на выходе: [...]]]></description>
			<content:encoded><![CDATA[<p>Возникла тут у меня задача обработать <span style="color: #003300;">103943</span> файла расположенных в <span style="color: #003300;">2618</span> папках.</p>
<p>И хотя у меня есть <a href="http://elsper.ru/2010/01/delphi-poluchenie-spiska-vsex-fajlov-v-papke-i-ee-podpapkax/">процедура для того чтобы получить список всех файлов</a> задача требует чтобы все файлы были в одной папке.</p>
<p>Ну раз требует, то сделаем. За основу взял ту же процедуру, что выложил по ссылке выше.<br />
Подумав немного получил на выходе:</p>
<p><span id="more-1357"></span><span style="color: #008000;">procedure AllFiles2one( Path,path2: string );</span><br />
<span style="color: #008000;">var</span><br />
<span style="color: #008000;">sRec: TSearchRec;</span><br />
<span style="color: #008000;">isFound: boolean;</span><br />
<span style="color: #008000;">begin</span><br />
<span style="color: #008000;">try</span><br />
<span style="color: #008000;">mkdir(path2); // создаем папку куда все это копируем.</span><br />
<span style="color: #008000;">except</span><br />
<span style="color: #008000;">end;</span><br />
<span style="color: #008000;">isFound := FindFirst( Path + &#8216;\*.*&#8217;, faAnyFile, sRec ) = 0;</span><br />
<span style="color: #008000;">while isFound do</span><br />
<span style="color: #008000;">begin</span><br />
<span style="color: #008000;">if ( sRec.Name &lt;&gt; &#8216;.&#8217; ) and ( sRec.Name &lt;&gt; &#8216;..&#8217; ) then</span><br />
<span style="color: #008000;">begin</span><br />
<span style="color: #008000;">if ( sRec.Attr and faDirectory ) = faDirectory then</span><br />
<span style="color: #008000;">AllFiles2one( Path + &#8216;\&#8217; + sRec.Name, path2) else</span></p>
<p><span style="color: #008000;">begin</span><br />
<span style="color: #008000;">//form1.Caption:=Path + &#8216;\&#8217; + sRec.Name;    // раскомментируйте для того чтобы можно было следить за процессом выполнения. Хотя следить можно просто мониторя вес итоговой папки и сравнивая с начальной.</span><br />
<span style="color: #008000;">CopyFile(Pchar( Path + &#8216;\&#8217; + sRec.Name ), Pchar( Path2 + &#8216;\&#8217; + StringReplace( StringReplace(Path,&#8217;:\&#8217;,'_&#8217;,[]) + &#8216;_&#8217; + sRec.Name,&#8217;\',&#8217;_',[rfReplaceAll] )),true);</span><br />
<span style="color: #008000;">end;</span></p>
<p><span style="color: #008000;">end;</span><br />
<span style="color: #008000;">Application.ProcessMessages;</span><br />
<span style="color: #008000;">isFound := FindNext( sRec ) = 0;</span><br />
<span style="color: #008000;">end;</span><br />
<span style="color: #008000;">FindClose( sRec );</span><br />
<span style="color: #008000;">end;</span></p>
<p>Сначала хотел обрезать путь до файла и так и копировать, но понял что туплю, потому что некоторые файлы могут иметь одно имя, и поэтому в процедуре каждый выходной файл имеет адрес своего пути. Переименовать их в обычные числа вы сможете <a href="http://elsper.ru/2010/11/programma-dlya-izmeneniya-razmera-fotok/">вот этой моей прогой</a>.</p>
<p>Процедура принимает входные данные:</p>
<p>Path &#8211; главный адрес с которого начать читать дерево.</p>
<p>Path2 &#8211; папка куда копировать.</p>
<p>!!ВНИМАНИЕ. ПРОЦЕДУРА <strong>КОПИРУЕТ </strong>ФАЙЛЫ, СЛЕДОВАТЕЛЬНО УЧИТЫВАЙТЕ ЭТО ОБРАБАТЫВАЯ БОЛЬШИЕ КАТАЛОГИ!!</p>
<Br>Автор: <a href="http://elsper.ru">Elsper.ru</a> <Br> <br><br>]]></content:encoded>
			<wfw:commentRss>http://elsper.ru/2011/08/skopirovat-vse-fajly-iz-dereva-v-odnu-papku/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Работа с JPG в Delphi (библиотека GDI+)</title>
		<link>http://elsper.ru/2011/08/rabota-s-jpg-v-delphi-biblioteka-gdi/</link>
		<comments>http://elsper.ru/2011/08/rabota-s-jpg-v-delphi-biblioteka-gdi/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 10:53:59 +0000</pubDate>
		<dc:creator>Elsper</dc:creator>
				<category><![CDATA[Прочее]]></category>
		<category><![CDATA[софт]]></category>
		<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://elsper.ru/?p=1307</guid>
		<description><![CDATA[Решил я тут поковыряться в своих прогах, а они отказываются компилиться из за отсутсвия модулей GDIPAPI, GDIPOBJ и GDIPUTIL. Дело в том, что в последних версиях я юзал библиотеку GDI+, которая не установлена ни на одном из обоих ноутов. Ну установил конечно, а вместе с тем решил, что можно ею поделиться с народом. Все же [...]]]></description>
			<content:encoded><![CDATA[<p>Решил я тут поковыряться в своих прогах, а они отказываются компилиться из за отсутсвия модулей <em>GDIPAPI, GDIPOBJ и GDIPUTIL</em>. Дело в том, что в последних версиях я юзал библиотеку GDI+, которая не установлена ни на одном из обоих ноутов.<br />
Ну установил конечно, а вместе с тем решил, что можно ею поделиться с народом.</p>
<p>Все же представляемая по умолчанию работа только с bmp (в делфи 7) явно устарела.</p>
<p>С самого начала выложу библиотеку. <a href="http://elsper.ru/wp-content/D_gdiplus.rar">Скачивайте</a></p>
<p>А теперь пара примеров работы с ней</p>
<p><span id="more-1307"></span>Сразу скажу, чтобы каждый раз не повторяться. В список модулей (uses) приписывайте три модуля GDIPAPI, GDIPOBJ, GDIPUTIL</p>
<p><span style="text-decoration: underline;">Первый пример.</span></p>
<p><em>Самое простое. Преобразование туда и обратно.</em></p>
<p><strong>Преобразование из bmp в jpg</strong></p>
<p><span style="color: #339966;">var</span><br />
<span style="color: #339966;"> encoderClsid: TGUID;</span><br />
<span style="color: #339966;"> Image: TGPImage;</span></p>
<p><span style="color: #339966;">begin</span><br />
<span style="color: #339966;"> Image := TGPImage.Create(&#8216;file.bmp&#8217;);</span><br />
<span style="color: #339966;"> GetEncoderClsid(&#8216;image/jpeg&#8217;, encoderClsid);</span><br />
<span style="color: #339966;"> image.Save(&#8216;file.jpg&#8217;, encoderClsid, nil);</span><br />
<span style="color: #339966;"> image.Free;</span><br />
<span style="color: #339966;"> end.</span></p>
<p><strong>Преобразование из jpg в bmp</strong></p>
<p><span style="color: #339966;">var</span><br />
<span style="color: #339966;"> encoderClsid: TGUID;</span><br />
<span style="color: #339966;"> Image: TGPImage;</span></p>
<p><span style="color: #339966;">begin</span><br />
<span style="color: #339966;"> Image := TGPImage.Create(&#8216;file.jpg&#8217;);</span><br />
<span style="color: #339966;"> GetEncoderClsid(&#8216;image/bmp&#8217;, encoderClsid);</span><br />
<span style="color: #339966;"> image.Save(&#8216;file.bmp&#8217;, encoderClsid, nil);</span><br />
<span style="color: #339966;"> image.Free;</span><br />
<span style="color: #339966;"> end.</span></p>
<p><span style="text-decoration: underline;">Второй пример.</span></p>
<p><em> </em><em>Именно в таком виде я и юзаю эту библиотеку, поэтому большей частью это будет копипаст с моего доргенчика. Хотя и с изменениями. Так что если будут ошибки пишите.<br />
</em></p>
<p><strong>Изменение размера jpg файла с помощью Delphi.</strong></p>
<p><span style="color: #339966;">var</span><br />
<span style="color: #339966;"> in_img, out_img: TGPImage;</span><br />
<span style="color: #339966;"> g: TGPGraphics;</span><br />
<span style="color: #339966;"> out_width, out_height, cou: Integer;</span><br />
<span style="color: #339966;"> sclx:extended;</span><br />
<span style="color: #339966;"> fname:string;</span><br />
<span style="color: #339966;"> encoderClsid: TGUID;</span></p>
<p><span style="color: #339966;">begin</span><br />
<span style="color: #339966;"> try</span><br />
<span style="color: #339966;"> fname:=&#8217;file.jpg&#8217;</span><br />
<span style="color: #339966;"> out_width :=150;</span><br />
<span style="color: #339966;"> out_height :=150;</span><br />
<span style="color: #339966;"> in_img := TGPImage.Create(fname);</span><br />
<span style="color: #339966;"> sclx:=out_width/in_img.GetWidth;</span></p>
<p><span style="color: #339966;">if sclx &lt; 1 then</span><br />
<span style="color: #339966;"> begin</span><br />
<span style="color: #339966;"> out_height :=round(in_img.GetHeight*sclx);</span><br />
<span style="color: #339966;"> out_img :=TGPBitmap.Create(out_width,out_height);</span><br />
<span style="color: #339966;"> g := TGPGraphics.Create(out_img);</span></p>
<p><span style="color: #339966;">if  in_img.GetWidth &gt; in_img.getheight then</span><br />
<span style="color: #339966;"> begin</span><br />
<span style="color: #339966;"> g.DrawImage(in_img, MakeRect(0, 0, out_width, out_height),</span><br />
<span style="color: #339966;"> (in_img.GetWidth-in_img.getheight) div 2, 0, in_img.getheight, in_img.GetHeight, UnitPixel);</span><br />
<span style="color: #339966;"> end  else</span><br />
<span style="color: #339966;"> g.DrawImage(in_img, MakeRect(0, 0, out_width, out_height),</span><br />
<span style="color: #339966;"> 0, (in_img.getheight-in_img.GetWidth) div 2,  in_img.GetWidth, in_img.GetWidth, UnitPixel);</span><br />
<span style="color: #339966;"> g.Destroy;</span><br />
<span style="color: #339966;"> in_img.Free;</span><br />
<span style="color: #339966;"> GetEncoderClsid(&#8216;image/jpeg&#8217;, encoderClsid);</span><br />
<span style="color: #339966;"> out_img.Save(fname, encoderClsid);</span><br />
<span style="color: #339966;"> out_img.free;</span><br />
<span style="color: #339966;"> end;</span></p>
<p><span style="color: #339966;">except end;</span><br />
<span style="color: #339966;"> end.</span></p>
<p>На самом деле этот код не просто изменяет размер, он сохраняет пропорции подгоняя картинку в квадратные рамки 150 на 150 и обрезая лишнее, если какая-то сторона длиннее другой. При чем обрезка идет не с одного конца, а пополам с выступающих краев.</p>
<p>__<br />
Для простого масштабирования нужно рассчитать размеры выходного файла и вместо</p>
<p><span style="color: #339966;">if  in_img.GetWidth &gt; in_img.getheight then</span><br />
<span style="color: #339966;"> begin</span><br />
<span style="color: #339966;"> g.DrawImage(in_img, MakeRect(0, 0, out_width, out_height), (in_img.GetWidth-in_img.getheight) div 2, 0, in_img.getheight, in_img.GetHeight, UnitPixel);</span><br />
<span style="color: #339966;"> end  else</span><br />
<span style="color: #339966;"> g.DrawImage(in_img, MakeRect(0, 0, out_width, out_height), 0, (in_img.getheight-in_img.GetWidth) div 2,  in_img.GetWidth, in_img.GetWidth, UnitPixel);</span></p>
<p>будет достаточно</p>
<p><span style="color: #339966;">g.DrawImage(in_img, MakeRect(0, 0, out_width, out_height), 0, 0, in_img.GetWidth, in_img.GetHeight, UnitPixel);</span></p>
<p>__<br />
Вопросы? Задавай. =)</p>
<Br>Автор: <a href="http://elsper.ru">Elsper.ru</a> <Br> <br><br>]]></content:encoded>
			<wfw:commentRss>http://elsper.ru/2011/08/rabota-s-jpg-v-delphi-biblioteka-gdi/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Скрытая загрузка картинок на PHP</title>
		<link>http://elsper.ru/2011/02/skrytaya-zagruzka-kartinok-na-php/</link>
		<comments>http://elsper.ru/2011/02/skrytaya-zagruzka-kartinok-na-php/#comments</comments>
		<pubDate>Thu, 10 Feb 2011 07:19:07 +0000</pubDate>
		<dc:creator>Elsper</dc:creator>
				<category><![CDATA[софт]]></category>
		<category><![CDATA[Дорвеи]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Скрипты]]></category>

		<guid isPermaLink="false">http://elsper.ru/?p=877</guid>
		<description><![CDATA[Представляю вашему вниманию один очень простой код, который тем не менее открывает не хилые перспективы в использовании картинок в дорвеестроении. &#60;? {$fp = fopen($_SERVER['DOCUMENT_ROOT'].&#8217;/img.php&#8217;, &#8216;w+&#8217;); fwrite($fp, &#8216;&#60;? header(&#171;Content-type: image/gif&#187;);  readfile ($_SERVER["DOCUMENT_ROOT"].&#187;/fotka/1.jpeg&#187;); ?&#62;&#8217;); fclose($fp);} echo  (&#8216;&#60;img src=img.php&#62;&#8217;); ?&#62; Чем этот код так замечателен? 1) Вместо img.php вы можете подсунуть ключ. 2) Вместо $_SERVER["DOCUMENT_ROOT"].&#187;/fotka/1.jpeg&#187; вы можете подставить [...]]]></description>
			<content:encoded><![CDATA[<p>Представляю вашему вниманию один очень простой код, который тем не менее открывает не хилые перспективы в использовании картинок в дорвеестроении.</p>
<p><span style="color: #003300;">&lt;?<br />
{$fp = fopen($_SERVER['DOCUMENT_ROOT'].&#8217;/img.php&#8217;, &#8216;w+&#8217;);<br />
fwrite($fp, &#8216;&lt;? header(&laquo;Content-type: image/gif&raquo;);  readfile ($_SERVER["DOCUMENT_ROOT"].&raquo;/fotka/1.jpeg&raquo;); ?&gt;&#8217;);<br />
fclose($fp);}</span></p>
<p><span style="color: #003300;">echo  (&#8216;&lt;img src=img.php&gt;&#8217;);</span></p>
<p><span style="color: #003300;">?&gt;</span></p>
<p>Чем этот код так замечателен?<span id="more-877"></span><br />
1) Вместо img.php вы можете подсунуть ключ.</p>
<p>2) Вместо $_SERVER["DOCUMENT_ROOT"].&raquo;/fotka/1.jpeg&raquo; вы можете подставить любой путь. Тоесть это может быть путь на сервере как в примере, а может и урл с другого сайта. То есть вам даже хранить файлы не придется.</p>
<p>Но это не все. Подумав еще немного я пришел к такой мысли.<br />
Добавим в .htaccess строчку:</p>
<p><span style="color: #003300;">AddType application/x-httpd-php .jpeg</span></p>
<p>А основной текст исправим на</p>
<p><span style="color: #003300;">&lt;?<br />
{$fp = fopen($_SERVER['DOCUMENT_ROOT'].&#8217;/img.jpeg&#8217;, &#8216;w+&#8217;);<br />
fwrite($fp, &#8216;&lt;? header(&laquo;Content-type: image/gif&raquo;);  readfile ($_SERVER["DOCUMENT_ROOT"].&raquo;/fotka/1.jpeg&raquo;); ?&gt;&#8217;);<br />
fclose($fp);}</span></p>
<p><span style="color: #003300;">echo  (&#8216;&lt;img src=img.jpeg&gt;&#8217;);</span></p>
<p><span style="color: #003300;">?&gt;</span></p>
<p>Чувствуете разницу?</p>
<p>Теперь комар носу не подточит! Браузер запрашивает картинку, браузер получает картинку! <img src='http://elsper.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Тоесть этот код позволяет сделать полноценное переименовывание &laquo;на лету&raquo;. Если у вас картинки имеют имена 1.jpeg, 2.jpeg и т.д., то вы сможете их отдавать как ключ1.jpeg, ключ2.jpeg. Или как в примере при запросе img.jpeg отдает /fotka/1.jpeg</p>
<p>Сюда можно еще прикрутить проверку наличия, чтобы код не выполнять заново каждый раз и не пытался создать уже созданный файл. Надо просто приписать одну строку перед началом кода</p>
<p><span style="color: #003300;">if ( !file_exists($_SERVER['DOCUMENT_ROOT'].&#8217;/wp-content/plugins/elsperpostovoy/plagin_e_postovie.php&#8217;))</span></p>
<p>но это уже детали</p>
<p>__</p>
<p>Офтоп:<br />
Красноярцы, почувствовали землетрясение?<br />
3 бала полтора часа назад было.</p>
<p>____</p>
<p>UPD.</p>
<p>В комментах возникло обсуждение и <a href="http://mrmozg.ru/">Мегамозг</a> предложил отличный вариант. Исправив, мелкие ошибки, выкладываю его тут:</p>
<p>В .htaccess пишем строку</p>
<p><span style="color: #003300;">RewriteRule ^([0-9]+)(.*).jpeg$ /ff.php?im=$1 [L]</span></p>
<p>Если файла до этого момента не было, то не забудьте первым делом написать строку</p>
<p><span style="color: #003300;">RewriteEngine On</span></p>
<p>Далее, в файле ff.php пишем</p>
<p><span style="color: #003300;">&lt;?php<br />
header(&laquo;Content-type: image/gif&raquo;);<br />
readfile($_SERVER["DOCUMENT_ROOT"].&#8217;/foto/&#8217;.(int)$_GET["im"].&#8217;.jpg&#8217;);<br />
?&gt;</span></p>
<p>Где, &laquo;/foto/&raquo; это папка с пронумерованными картинками типа .jpg, при желании конечно можно поменять и папку и тип, и сам файл вместо ff.php назвать иначе.</p>
<p>После этих простых действий вы сможете обращаться к файлу по адресу:</p>
<p>сайт.ру/номер файла/транслитирированный ключ.jpeg</p>
<p>Выгода очевидна. Роботы видят что файл называется &laquo;транслитирированный ключ.jpeg&raquo;, а сервер подсовывает вместо этого файл &laquo;адрес на сервере/foto/номер файла.jpg&raquo;</p>
<p>Разумеется эти ухищрения имеют смысл, если вам или просто лень заранее переименовывать все файлы, или же если на одном сервере пачка доров и они юзают одну и ту же пачку картинок. Правда в этом случае всеравно придется прикручивать файл соответствий, но думаю это уже не вызовет проблем. Если вызовет, спрашивайте, все объясню.</p>
<Br>Автор: <a href="http://elsper.ru">Elsper.ru</a> <Br> <br><br>]]></content:encoded>
			<wfw:commentRss>http://elsper.ru/2011/02/skrytaya-zagruzka-kartinok-na-php/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Процедура чтобы грабить.</title>
		<link>http://elsper.ru/2011/01/procedura-chtoby-grabit/</link>
		<comments>http://elsper.ru/2011/01/procedura-chtoby-grabit/#comments</comments>
		<pubDate>Sat, 15 Jan 2011 21:18:37 +0000</pubDate>
		<dc:creator>Elsper</dc:creator>
				<category><![CDATA[софт]]></category>
		<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://elsper.ru/?p=849</guid>
		<description><![CDATA[Я уже писал ранее как очень легко можно скачать баш. Зачем тогда нужно еще что-то, если тот код работает? Дело в том что иногда страницы не загружаются, сервак там затупит или еще что-то печальное. И парсер виснет, ну или в лучшем случае переходит на следующий адрес. Вот и я с такой проблемой столкнулся. Можно было [...]]]></description>
			<content:encoded><![CDATA[<p>Я уже писал ранее как очень легко можно <a href="http://elsper.ru/2010/07/sparsil-bash/">скачать баш.</a></p>
<p>Зачем тогда нужно еще что-то, если тот код работает?</p>
<p>Дело в том что иногда страницы не загружаются, сервак там затупит или еще что-то печальное. И парсер виснет, ну или в лучшем случае переходит на следующий адрес. Вот и я с такой проблемой столкнулся. Можно было конечно удовлетвориться и тем что скачал, но&#8230;</p>
<p>Я написал полноценную процедуру, которую можно использовать почти &laquo;как есть&raquo;. Лишь подкорректировав урл и номера страниц. Минус программы в том, что она парсит урлы по шаблону</p>
<p>адрес_сайта_всякие_параметры=1<br />
адрес_сайта_всякие_параметры=2</p>
<p>К счастью основная часть динамических сайтов имеет именно такую структуру, и даже вордпресс со включенным ЧПУ можно парсить по &laquo;сайт.рф/?p=номер&raquo; (Но там есть свои сложности)</p>
<p>Короче код:</p>
<p><span style="color: #003300;">procedure pars;<br />
var i:integer;<br />
idhttppars:Tidhttp;<br />
spisok,textik:TStringList;<br />
begin</span></p>
<p><span style="color: #003300;">// инициализация<br />
</span></p>
<p><span style="color: #003300;"> textik:= TStringList.Create;<br />
spisok:= TStringList.Create;<br />
idhttp</span><span style="color: #003300;">pars</span><span style="color: #003300;">:=tidhttp.Create(nil);<br />
idhttp</span><span style="color: #003300;">pars</span><span style="color: #003300;">.HandleRedirects:=True;<br />
idhttp</span><span style="color: #003300;">pars</span><span style="color: #003300;">.ReadTimeout := 3000;</span></p>
<p><span style="color: #003300;">if FileExists(&#8216;papka/&#8217;)= false then // Задаем название папки куда будем сохранять скачанные страницы<br />
mkdir(&#8216;papka&#8217;);</span></p>
<p><span style="color: #003300;">for i:=1 to 1000 do // здесь задаем циферки<br />
begin<br />
spisok.Append(inttostr(i));<br />
end;<br />
</span></p>
<p><span style="color: #003300;">// конец инициализайции.</span></p>
<p><span style="color: #003300;">i:=-1;<br />
while i &lt;  spisok.Count-1  do<br />
begin<br />
i:=i+1;<br />
//form1.button1.Caption:= inttostr(i)+&#8217;/'+inttostr(spisok.Count-1); // Это индикатор выполнения. Если хотите подставьте вместо батон1, что нибудь другое и раскомментируйте строку.<br />
application.ProcessMessages;<br />
if FileExists(&#8216;papka/&#8217;+spisok[i]) then<br />
begin<br />
spisok.Delete(i);<br />
i:=i-1;<br />
end<br />
else<br />
begin<br />
try</span></p>
<p><span style="color: #003300;">textik.Text:=idhttppars.Get(&#8216;урл=&#8217;+spisok[i]); // Здесь конструируем адрес страницы<br />
textik.SaveToFile(&#8216;papka/&#8217;+spisok[i]);<br />
except   end;<br />
end;<br />
end;<br />
idhttppars.Free ;<br />
textik.Free;<br />
i:=spisok.Count-1;<br />
//form1.Memo1.Lines:=spisok;  // это один из инструментов отладки и наблюдения за работой процедуры можно удалить, можно наблюдать.<br />
spisok.Free;</span></p>
<p><span style="color: #003300;">if i &lt; 1 then application.Terminate else pars; // в конце парсинга процедура вызывает закрытие проги, если вы этого не хотите, то удалите  вызов application.Terminate</span></p>
<p><span style="color: #003300;">end;</span></p>
<p>Не забудьте добавить в uses модуль IdHTTP, если его там еще нет.</p>
<p>Конечно можно упростить например вынести инициализацию и освобождение в отдельные части, но тогда это удобнее всего делать в классе формы. То есть переменные описать там где описываются общие переменные формы, инициализацию и первичное заполнение массива ( я их даже обозначил для вашего удобства) можно в tform1.FormCreate засунуть. А саму процедуру вызывать например с кнопки и в ней написать:</p>
<p><span style="color: #003300;">pars;<br />
idhttppars.Free ;<br />
textik.Free;<br />
spisok.Free;</span></p>
<p>Соответственно убрав эти три строки из тела процедуры. Но мне захотелость сделать именно в виде автономной процедуры <img src='http://elsper.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<Br>Автор: <a href="http://elsper.ru">Elsper.ru</a> <Br> <br><br>]]></content:encoded>
			<wfw:commentRss>http://elsper.ru/2011/01/procedura-chtoby-grabit/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Программа для изменения размера фоток. И программа для изменения структуры папок</title>
		<link>http://elsper.ru/2010/11/programma-dlya-izmeneniya-razmera-fotok/</link>
		<comments>http://elsper.ru/2010/11/programma-dlya-izmeneniya-razmera-fotok/#comments</comments>
		<pubDate>Sat, 13 Nov 2010 13:49:13 +0000</pubDate>
		<dc:creator>Elsper</dc:creator>
				<category><![CDATA[софт]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Скрипты]]></category>
		<category><![CDATA[Фото]]></category>

		<guid isPermaLink="false">http://elsper.ru/?p=803</guid>
		<description><![CDATA[Пишу я тут очередной адалтовый сайт. На этот раз за дело взялсо очень серьезно. Написал движок на пыхе, получился самый большой мой движок. Аж 10кб весит. . И уже 4 проги на делфях, две простенькие из которых я опубликую. Я их правда совместил в одну, но думаю не страшно. По-быстренькому привел ее в более менее [...]]]></description>
			<content:encoded><![CDATA[<p>Пишу я тут очередной адалтовый сайт. На этот раз за дело взялсо очень серьезно. Написал движок на пыхе, получился самый большой мой движок. Аж 10кб весит. <img src='http://elsper.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . И уже 4 проги на делфях, две простенькие из которых я опубликую. Я их правда совместил в одну, но думаю не страшно.</p>
<p>По-быстренькому привел ее в более менее презентабельный вид,спрятал все лишнее, приписал капшены на кнопки, и вообще описал как мог. <img src='http://elsper.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><img class="aligncenter size-full wp-image-805" title="resizer" src="http://elsper.ru/wp-content/uploads/2010/11/resizer.PNG" alt="resizer" /></p>
<p>Первая часть. Ресайз фоток. Иначе говоря изменение размера фотографий. Чтобы подогнать фотки в дизайн, и при этом не переживать их вручную, и не заставлять браузер делать это я и сел за делфи.</p>
<p>Кнопка добавки в список парсит не только файлы в папке, но и файлы в подпапках. В общем это слегка измененный скрипт из <a href="http://elsper.ru/2010/01/delphi-poluchenie-spiska-vsex-fajlov-v-papke-i-ee-podpapkax/">этой </a>записи. Далее, после нажатия на кнопку &laquo;обработка списка&raquo; запускается цикл по очереди загружающий, пережимающий, и сохраняющий фотку. Поэтому прежде чем обрабатывать фотки делайте копию. Если фотка уже заданной ширины, то тянуть прога ее не будет. Обрабатывает только жипеги.</p>
<p>При большом объеме может показаться что она зависла, но это врядли, хотя сначала у меня была утечка памяти =))) Но теперь все нормально даже если задать обработку нескольких гигов. Это хоть и займет несколько десятков минут, но и памяти не более 10мб.</p>
<p>Вторая часть. Это тот же <a href="http://elsper.ru/2010/01/delphi-poluchenie-spiska-vsex-fajlov-v-papke-i-ee-podpapkax/">скрипт получения списка всех файлов в папке и подпапках</a>, что и в первой части, но модифицирован он уже гораздо сильнее.  Это скрипт переименовывает содержимое папки, так чтобы объекты шли по номерам от 1 до конца. Переименовывает файлы в подпапках и сами подпапки. Если в папке будет подпапка и файл, то они будут переименованны по порядку, так что будьте внимательны. Файлы должны быть только jpg, потому что всеравно такое расширение подставляется при переименовке.</p>
<p>Для примера. Есть у нас такая структура:</p>
<p>papka/<br />
papka/s1/<br />
papka/s1/foto1.jpg<br />
papka/s1/foto2.jpg<br />
<span style="color: #ff0000;">papka/s1/all.PNG</span><br />
papka/s2/<br />
papka/s2/1.jpg<br />
papka/s2/foto3.jpg<br />
papka/s2/foto4.jpg<br />
papka/s2/foto5.jpg<br />
papka/старое/<br />
papka/старое/delet.jpg<br />
<span style="color: #ff0000;">papka/123.jpg</span></p>
<p>задаем главной папку &laquo;papka/&raquo; и на выходе получаем</p>
<p>papka/<br />
papka/1/<br />
papka/1/1.jpg<br />
papka/1/2.jpg<br />
<span style="color: #003300;">papka/1/3.jpg</span><br />
papka/2/<br />
papka/2/1.jpg<br />
papka/2/2.jpg<br />
papka/2/3.jpg<br />
papka/2/4.jpg<br />
papka/3/<br />
papka/3/1.jpg<br />
<span style="color: #003300;">papka/4.jpg</span></p>
<p>(Цветом выделил моменты, которые стоит учитывать заранее.)</p>
<p>Конечно понимаю что проги просты, а предназначение второй вообще не очевидно, но все же.</p>
<p><a href="http://elsper.ru/wp-content/resiz.rar">Скачать</a></p>
<Br>Автор: <a href="http://elsper.ru">Elsper.ru</a> <Br> <br><br>]]></content:encoded>
			<wfw:commentRss>http://elsper.ru/2010/11/programma-dlya-izmeneniya-razmera-fotok/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
