<?xml version="1.0" encoding="windows-1251" ?>
<rss version="2.0">
<channel>
	<title>Последние ответы - Delphi.int.ru Expert</title>
	<link>http://expert.delphi.int.ru</link>	
	<description>Информация о последних ответах на вопросы.</description>
	<language>ru-ru</language>
	<lastBuildDate>Thu, 09 Sep 2010 00:53:00 +0400</lastBuildDate>
	<copyright>Copyright (C) 2004-2010 Delphi.int.ru</copyright>
	<managingEditor>admin@delphi.int.ru</managingEditor>
	<webMaster>admin@delphi.int.ru</webMaster>
	<pubDate>Thu, 09 Sep 2010 00:53:00 +0400</pubDate>
	<category>Programming</category>
	<generator>http://expert.delphi.int.ru - RSS Generator</generator>
	<ttl>180</ttl>
<item>
	<title>Ответ на вопрос № 4570 (эксперт: Вадим К)</title>
	<link>http://expert.delphi.int.ru/question/4570/</link>
	<guid>http://expert.delphi.int.ru/question/4570/</guid>
	<pubDate>Thu, 09 Sep 2010 00:50:22 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, mr_switch!<br />
Не нужно пускать пользователей в базу! потому что так любой человек уведет всю базу. Правильно делать некого посредника. То есть специальное приложение, которое и работает с одной стороны с базой, а с другой с приложением - классическая трехзвенка.<br />
<br />
Сами пароли конечно в базе хранить не стоит, а например md5 хеши. <br />
<br />
Проверить пароль до создания главной формы конечно можно. и это не сложно. Открываем файл Project1.dpr (project-> View Source) и там видим код создания главной формы. Никто не мешает перед ней создать свою и к примеру, если все плохо, то даже не создавать главную форму. Поищите в разделе статей мою статью о формах, там есть предостаточно информации.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/6/" target="_blank"><strong>Программирование баз данных (БД)</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/192/" target="_blank"><strong>Вадим К</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4570/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4569 (эксперт: bugmenot)</title>
	<link>http://expert.delphi.int.ru/question/4569/</link>
	<guid>http://expert.delphi.int.ru/question/4569/</guid>
	<pubDate>Wed, 08 Sep 2010 17:29:17 +0400</pubDate>
	<description><![CDATA[
	А теперь - правильный ответ :-)<br />
Деталей реализации в CLR не знаю, опишу на низком уровне <br />
Протокол TCP реализует управление состоянием соединения и уведомляет о закрытии.<br />
Close должно вызывать след. обмен <a href="http://www.firewall.cx/pictures/tcp-analysis-section-4-3.gif" target="_blank">http://www.firewall.cx/pictures/tcp-analysis-section-4-3.gif</a> в этом случае другой конец получает статус WSAEDISCON (10101) - <a href="http://msdn.microsoft.com/en-us/library/ms740668(VS.85).aspx" target="_blank">http://msdn.microsoft.com/en-us/library/ms740668(VS.85).aspx</a><br />
Спецификация описывает второй возможный способ форсированного закрытия соединения, тогда посылается флаг RST вместо FIN и статус будет WSAECONNRESET (10054) - там же<br />
<br />
4.2.2.13  Closing a Connection <a href="http://tools.ietf.org/html/rfc1122#section-4.2.2.13" target="_blank">http://tools.ietf.org/html/rfc1122#section-4.2.2.13</a>
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/41/" target="_blank"><strong>C++</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/4223/" target="_blank"><strong>bugmenot</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4569/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4561 (эксперт: DNK)</title>
	<link>http://expert.delphi.int.ru/question/4561/</link>
	<guid>http://expert.delphi.int.ru/question/4561/</guid>
	<pubDate>Wed, 08 Sep 2010 16:03:02 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, vadim98!<br />
Для картинки выставляем свойство Cursor = crHandPoint. Пишем обработчик для события OnClick:<br />
<pre class="delphi-1"><span style="color: #0000FF;">uses</span> ShellAPI;
&nbsp;
<span style="color: #006600;">{$R *.dfm}</span>
&nbsp;
<span style="color: #0000FF;">procedure</span> TForm1.<span style="color: #000000;">Image1Click</span><span style="color: #000000;">&#40;</span>Sender: TObject<span style="color: #000000;">&#41;</span>;
<span style="color: #0000FF;">Const</span>
  URL : String = <span style="color: #DD3700;">'http://www.delphi.int.ru'</span>;
<span style="color: #0000FF;">begin</span>
  ShellExecute<span style="color: #000000;">&#40;</span><span style="color: #DD0000;">0</span>,<span style="color: #DD3700;">'open'</span>,pChar<span style="color: #000000;">&#40;</span>URL<span style="color: #000000;">&#41;</span>,<span style="color: #0000FF;">NIL</span>,<span style="color: #0000FF;">NIL</span>,SW_SHOWNORMAL<span style="color: #000000;">&#41;</span>;
<span style="color: #0000FF;">end</span>;</pre>
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/8/" target="_blank"><strong>Графика (2D и 3D) в приложениях</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/348/" target="_blank"><strong>DNK</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4561/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4562 (эксперт: DNK)</title>
	<link>http://expert.delphi.int.ru/question/4562/</link>
	<guid>http://expert.delphi.int.ru/question/4562/</guid>
	<pubDate>Wed, 08 Sep 2010 15:51:56 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, Zombi!<br />
Ожидал уточнений, но похоже придется подключать телепатию. Можно предположить два варианта:<br />
1. Защита от несанкционированного доступа.<br />
2. Авторизация в многопользовательском приложении.<br />
<br />
1. Советую воспользоваться готовыми <a href="http://www.wasm.ru/toollist.php?list=12">инструментами-криптопротекторами</a>.<br />
На сайте "Королевство Делфи" есть интересные статьи по теории:<br />
<a href="http://www.delphikingdom.com/asp/viewitem.asp?catalogid=775">Технология шифрования исполняемого кода</a><br />
<a href="http://www.delphikingdom.com/asp/viewitem.asp?catalogid=90">Как написать программу, которую будет дешевле купить, чем сломать</a><br />
<a href="http://www.delphikingdom.com/asp/viewitem.asp?catalogid=846">Защита от несанкционированного использования программ, написанных на Delphi</a><br />
<br />
2. Для приложений не клиент-серверных тут сложно придумать что-то надежное. Конечно можно хранить список пользователей в специальном зашифрованном файле, но злодей всегда может заменить его своим. Поэтому лучше возложить авторизацию пользователя на операционную систему, а персональные данные пользователя программа обязана хранить в его домашнем каталоге.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/2/" target="_blank"><strong>Общие вопросы по программированию</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/348/" target="_blank"><strong>DNK</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4562/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4569 (эксперт: Вадим К)</title>
	<link>http://expert.delphi.int.ru/question/4569/</link>
	<guid>http://expert.delphi.int.ru/question/4569/</guid>
	<pubDate>Wed, 08 Sep 2010 13:32:48 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, webkent!<br />
Правильный ответ - никак. На сервере можно узнать по таймауту подключения.<br />
Если клиент-сервер свой, то делают так называемые keep-alive пакеты. то есть клиент обязан послать серверу раз в сколько то минут спецпакет. Сервер ответить. Или наоборот. Если ответ не пришел за какое то определенное время - значит клиент отвалился.<br />
А вот само закрытие делают так - вначале отсылают специальный пакет завершения соединения, дожидаются ответа и закрывают сокет.<br />
Так делают все нормальные протоколы.<br />
Если же сервер/клиент ничего не шлет, то разрыв соединения можно "не заметить" до нескольких часов (все зависит от настроек).
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/41/" target="_blank"><strong>C++</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/192/" target="_blank"><strong>Вадим К</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4569/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4567 (эксперт: Вадим К)</title>
	<link>http://expert.delphi.int.ru/question/4567/</link>
	<guid>http://expert.delphi.int.ru/question/4567/</guid>
	<pubDate>Tue, 07 Sep 2010 14:05:22 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, darkness angel!<br />
скачиваем, приносим на флешке/дискетке. открываем консоль и пишем<br />
sudo dpkg -i имя_пакета.deb<br />
вводить пароль за надобности и ждем. Если зависимостей не будет, то все хорошо, иначе может понадобиться докачать пакетов.<br />
<blockquote style="display: block; border: 1px solid #CCCCCC; background-color: #FBFBFB; margin: 5px; padding: 3px 3px 3px 10px;"><span style="font-size: 10px;"><strong>&ldquo;Цитата&rdquo;</strong></span><br />т. к. модем не поддерживается</blockquote><br />
Весьма странно. Что же это за модем такой? Скорее всего просто сконфигурировать не смогли.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/42/" target="_blank"><strong>Разные вопросы</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/192/" target="_blank"><strong>Вадим К</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4567/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4565 (эксперт: Вадим К)</title>
	<link>http://expert.delphi.int.ru/question/4565/</link>
	<guid>http://expert.delphi.int.ru/question/4565/</guid>
	<pubDate>Mon, 06 Sep 2010 11:53:32 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, Емельянов Константин Игоревич!<br />
при объявлении массива Вы используете переменную, а по синтаксису разрешено только константы или то, что может ими быть.<br />
То есть вот так можно<br />
const j = 100;<br />
var a:array[1..j] of integer;<br />
<br />
а вот если j переменная, то компилятор не знает, сколько места нужно выделить под массив и соответственно не может.<br />
Если же нужен массив с переменным размером, то следует использовать динамические массивы.<br />
Объявляются так<br />
a:array of integer;// размер как видим не указан.<br />
<br />
а потом, что бы выставить правильный размер, используем такое<br />
SetLength(a, 100); Вот тут и можно использовать и переменную, и выражение. Хоть через куб.<br />
Единственный момент - такие массивы индексируются с нуля, а не с единицы.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/2/" target="_blank"><strong>Общие вопросы по программированию</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/192/" target="_blank"><strong>Вадим К</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4565/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4565 (эксперт: DNK)</title>
	<link>http://expert.delphi.int.ru/question/4565/</link>
	<guid>http://expert.delphi.int.ru/question/4565/</guid>
	<pubDate>Mon, 06 Sep 2010 11:51:49 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, Емельянов Константин Игоревич!<br />
В качестве границ диапазона можно устанавливать только выражения, значения которых известно на этапе компиляции. Обычно это константа, а тут j - это переменная. Конечно можно поставить 36 вместо j, но дальше ошибка всплывет опять, из-за того что вместо "(x1, x2,... и т.д." должно быть константа. Программа пишется в корне неправильно.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/2/" target="_blank"><strong>Общие вопросы по программированию</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/348/" target="_blank"><strong>DNK</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4565/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4557 (эксперт: Вадим К)</title>
	<link>http://expert.delphi.int.ru/question/4557/</link>
	<guid>http://expert.delphi.int.ru/question/4557/</guid>
	<pubDate>Fri, 03 Sep 2010 14:16:37 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, SOA!<br />
сколько хлама в таком маленьком коде!<br />
собственно с проблемы. <br />
MyThread - это функция, а не метод класса TMyPanel, поэтому доступа до его полей и методов не может иметь. Что бы обойти это - нужно передать указатель на объект.<br />
например так<br />
<pre class="delphi-1">ThreadHandl:=CreateThread<span style="color: #000000;">&#40;</span><span style="color: #0000FF;">nil</span>,<span style="color: #DD0000;">0</span>,@MyThread,<span style="color: #0000FF;">self</span>,<span style="color: #DD0000;">0</span>,ThreadID<span style="color: #000000;">&#41;</span>;</pre>
(может там приведение типов для self понадобиться)<br />
а в самой процедуре делаем так<br />
<pre class="delphi-1"><span style="color: #0000FF;">Function</span> MyThread<span style="color: #000000;">&#40;</span>p:pointer<span style="color: #000000;">&#41;</span>:LongInt; <span style="color: #0000FF;">STDCall</span>;
<span style="color: #0000FF;">var</span>
ExitCode: Integer;
&nbsp;
i1,i2: Integer;
panel:TMyPanel;
<span style="color: #0000FF;">Begin</span>
panel := TMypanel<span style="color: #000000;">&#40;</span>p<span style="color: #000000;">&#41;</span>;
GetExitCodeThread<span style="color: #000000;">&#40;</span>ThreadHandl,ExitCode<span style="color: #000000;">&#41;</span>;
&nbsp;
i1:=panel.<span style="color: #000000;">Width</span>;
i2:=panel.<span style="color: #000000;">Height</span>;
&nbsp;
&nbsp;
ExitThread<span style="color: #000000;">&#40;</span>ExitCode<span style="color: #000000;">&#41;</span>;
<span style="color: #0000FF;">End</span>;</pre>
<br />
Вторая ошибка - это создание треда в методе Paint. В этом методе нужно делать строго одно - отрисовать картинку. Вы же создаете тред. Картинка отрисована не будет. Тред сам то может рисовать, но это будет очень неефективно - будут мерцания.<br />
<br />
Метод Paint вызывается системой, когда она хочет отрисовать компонент. Поэтому если в нем быстро рисовать все что нужно, то будет очень красиво работать.<br />
<br />
Как же сделать более правильно?<br />
1) воспользоваться классом TThread, а не изобретать велосипед с системными функциями. Они как минимум ничего не знают о VCL и в будущем это может быть выражено в виде больших глюков.<br />
2) тред запускать в момент создания компонента.<br />
3) тред делает рассчеты и рисует на TBitmap'е. А вот метод Paint просто берет этот битмап и просто копирует на панель. Конечно, тред может выставить специальный флажок, что данные ещё не готовы или использовать два битмапа (на одном тред рисует, на второй переносит, когда изображение достигает какого то логического этапа и с этого битмапа уже рисует Paint).<br />
4) Не забывать о том, что есть такое понятие как критические секции и мютексы и аккуратно синхронизировать работу.<br />
5) подумать о том, что Panel - не очень хороший компонент в данном случае и наследоваться от TGraphicsControl или чего то подобного.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/12/" target="_blank"><strong>Работа с компонентами и библиотеками</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/192/" target="_blank"><strong>Вадим К</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4557/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4556 (эксперт: Егор)</title>
	<link>http://expert.delphi.int.ru/question/4556/</link>
	<guid>http://expert.delphi.int.ru/question/4556/</guid>
	<pubDate>Thu, 02 Sep 2010 20:41:01 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, hatecows!<br />
Можно картинку отобразить с помощью компонента Image, а точку искать с помощью канвы (Canvas), свойства Pixels, содержащего все точки канвы.<br />
Пример: на форму кладём Image1, метку Label1 кнопку Button1. У компонента Image1 в свойстве Picture задаём имя графического файла. Затем в обработчике нажатия на кнопку пишем код:<br />
<pre class="delphi-1"><span style="color: #0000FF;">procedure</span> TForm1.<span style="color: #000000;">Button1Click</span><span style="color: #000000;">&#40;</span>Sender: TObject<span style="color: #000000;">&#41;</span>;
<span style="color: #0000FF;">var</span>
  x, y, c : integer;
<span style="color: #0000FF;">begin</span>
  c := clRed;
  <span style="color: #0000FF;">for</span> x:=<span style="color: #DD0000;">0</span> <span style="color: #0000FF;">to</span> Image1.<span style="color: #000000;">Width</span><span style="color: #DD0000;">-1</span> <span style="color: #0000FF;">do</span>
    <span style="color: #0000FF;">for</span> y:=<span style="color: #DD0000;">0</span> <span style="color: #0000FF;">to</span> Image1.<span style="color: #000000;">Height</span><span style="color: #DD0000;">-1</span> <span style="color: #0000FF;">do</span>
      <span style="color: #0000FF;">if</span> Image1.<span style="color: #000000;">Canvas</span>.<span style="color: #000000;">Pixels</span><span style="color: #000000;">&#91;</span>x,y<span style="color: #000000;">&#93;</span>=c <span style="color: #0000FF;">then</span>
        Label1.<span style="color: #000000;">Caption</span> := <span style="color: #DD3700;">'x='</span> + IntToStr<span style="color: #000000;">&#40;</span>x<span style="color: #000000;">&#41;</span> + <span style="color: #DD3700;">'  y='</span> + IntToStr<span style="color: #000000;">&#40;</span>y<span style="color: #000000;">&#41;</span>;
<span style="color: #0000FF;">end</span>;</pre>
<br />
Ну или можно искать не "красную" точку, а "нечёрную" точку:<br />
<pre class="delphi-1"><span style="color: #0000FF;">procedure</span> TForm1.<span style="color: #000000;">Button1Click</span><span style="color: #000000;">&#40;</span>Sender: TObject<span style="color: #000000;">&#41;</span>;
<span style="color: #0000FF;">var</span>
  x, y : integer;
<span style="color: #0000FF;">begin</span>
  <span style="color: #0000FF;">for</span> x:=<span style="color: #DD0000;">0</span> <span style="color: #0000FF;">to</span> Image1.<span style="color: #000000;">Width</span><span style="color: #DD0000;">-1</span> <span style="color: #0000FF;">do</span>
    <span style="color: #0000FF;">for</span> y:=<span style="color: #DD0000;">0</span> <span style="color: #0000FF;">to</span> Image1.<span style="color: #000000;">Height</span><span style="color: #DD0000;">-1</span> <span style="color: #0000FF;">do</span>
      <span style="color: #0000FF;">if</span> Image1.<span style="color: #000000;">Canvas</span>.<span style="color: #000000;">Pixels</span><span style="color: #000000;">&#91;</span>x,y<span style="color: #000000;">&#93;</span>&lt;&gt;clBlack <span style="color: #0000FF;">then</span>
        Label1.<span style="color: #000000;">Caption</span> := <span style="color: #DD3700;">'x='</span> + IntToStr<span style="color: #000000;">&#40;</span>x<span style="color: #000000;">&#41;</span> + <span style="color: #DD3700;">'  y='</span> + IntToStr<span style="color: #000000;">&#40;</span>y<span style="color: #000000;">&#41;</span>;
<span style="color: #0000FF;">end</span>;</pre>
<br />
Безусловно, есть и другие варианты решения.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/8/" target="_blank"><strong>Графика (2D и 3D) в приложениях</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/3318/" target="_blank"><strong>Егор</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4556/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4555 (эксперт: Вадим К)</title>
	<link>http://expert.delphi.int.ru/question/4555/</link>
	<guid>http://expert.delphi.int.ru/question/4555/</guid>
	<pubDate>Thu, 02 Sep 2010 15:06:23 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, eJay!<br />
Ну наверно где то так.<br />
<pre class="delphi-1">StringGrid1.<span style="color: #000000;">rowcount</span> := memo1.<span style="color: #000000;">lines</span>.<span style="color: #000000;">count</span>;
StringGrid1.<span style="color: #000000;">FixedRow</span> := <span style="color: #DD0000;">0</span>;
<span style="color: #0000FF;">for</span> i := <span style="color: #DD0000;">0</span> <span style="color: #0000FF;">to</span> Memo1.<span style="color: #000000;">lines1</span>.<span style="color: #000000;">count</span> <span style="color: #DD0000;">-1</span> <span style="color: #0000FF;">do</span>
  StringGrid1.<span style="color: #000000;">Cells</span><span style="color: #000000;">&#91;</span><span style="color: #DD0000;">0</span>, i<span style="color: #000000;">&#93;</span> := memo1.<span style="color: #000000;">lines</span><span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span>;</pre>
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/12/" target="_blank"><strong>Работа с компонентами и библиотеками</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/192/" target="_blank"><strong>Вадим К</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4555/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4547 (эксперт: Вадим К)</title>
	<link>http://expert.delphi.int.ru/question/4547/</link>
	<guid>http://expert.delphi.int.ru/question/4547/</guid>
	<pubDate>Mon, 30 Aug 2010 21:50:31 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, darkness angel!<br />
Это на самом деле не очень сложно. Для начала идем на сайт <a href="http://xfce-look.org/index.php?xcontentmode=36" target="_blank">http://xfce-look.org/index.php?xcontentmode=36</a> и ищем себе подходящие курсоры.<br />
Скачиваем архивы себе. припустим я выбрал BlackCat (первый попавшийся <a href="http://xfce-look.org/content/show.php/Blackcat?content=129246)" target="_blank">http://xfce-look.org/content/show.php/Blackcat?content=129246)</a><br />
открываем коносоль, заходим в каталог с архивом.<br />
делаем <br />
mv blackcat.tar.gz ~/.icons/<br />
cd ~/.icons<br />
tar xvf blackcat.tar.gz<br />
rm ~/.icons/blackcat.tar.gz<br />
далее<br />
идем в Settings Manager> Mouse.<br />
на вкладке Theme выбираем Blackcat.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/42/" target="_blank"><strong>Разные вопросы</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/192/" target="_blank"><strong>Вадим К</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4547/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4543 (эксперт: Вадим К)</title>
	<link>http://expert.delphi.int.ru/question/4543/</link>
	<guid>http://expert.delphi.int.ru/question/4543/</guid>
	<pubDate>Mon, 30 Aug 2010 10:37:42 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, Селиваненко Александр Сергеевич!<br />
Вам сюда <a href="http://www.overclockers.ru/files/index.shtml?dir=33" target="_blank">http://www.overclockers.ru/files/index.shtml?dir=33</a><br />
лично мне там нравиться програмка Super Pi и Prime, которые считают число Pi с большой точностью. Этим они очень хорошо нагружают процессор, а так как результат расчетов им известен, то они могут сказать, правильно ли все прошло.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/30/" target="_blank"><strong>Поиск в интернете</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/192/" target="_blank"><strong>Вадим К</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4543/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4542 (эксперт: bugmenot)</title>
	<link>http://expert.delphi.int.ru/question/4542/</link>
	<guid>http://expert.delphi.int.ru/question/4542/</guid>
	<pubDate>Mon, 30 Aug 2010 03:43:52 +0400</pubDate>
	<description><![CDATA[
	модуль SysUtils при инициализации вызывает &lt;a href="http://msdn.microsoft.com/en-us/library/ms724451(VS.85).aspx"&gt;GetVersionEx&lt;/a&gt; и заполняет глобальные переменные, указанные в приложении. Для определения &lt;i&gt;названия&lt;/i&gt; версии Windows будет полезна табличка из секции Remarks описания структуры &lt;a href="http://msdn.microsoft.com/en-us/library/ms724834(VS.85).aspx"&gt;OSVERSIONINFO&lt;/b&gt;<br />
<br />
имя пользователя возвращает функция &lt;a href="http://msdn.microsoft.com/en-us/library/ms724432(VS.85).aspx"&gt;GetUserName&lt;/a&gt;
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/5/" target="_blank"><strong>Взаимодействие с Windows</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/4223/" target="_blank"><strong>bugmenot</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4542/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4544 (эксперт: Fantom)</title>
	<link>http://expert.delphi.int.ru/question/4544/</link>
	<guid>http://expert.delphi.int.ru/question/4544/</guid>
	<pubDate>Mon, 30 Aug 2010 01:39:45 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, Селиваненко Александр Сергеевич!<br />
<br />
щелкнуть на значок брандмауера в трее, затем в правой части способы оповещения и убрать что не нужно(т.е. поставить галочки  напротив ВСЕХ пунктоов).
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/42/" target="_blank"><strong>Разные вопросы</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/3506/" target="_blank"><strong>Fantom</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4544/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4539 (эксперт: min@y™)</title>
	<link>http://expert.delphi.int.ru/question/4539/</link>
	<guid>http://expert.delphi.int.ru/question/4539/</guid>
	<pubDate>Fri, 27 Aug 2010 15:20:24 +0400</pubDate>
	<description><![CDATA[
	Очень похоже на отсутствие драйвера для SATA-контроллера. Пиратская винда тут или нет - неважно.<br />
Тут есть, по крайней мере, 2 пути решения.<br />
<br />
1. Если есть флопповод и родной диск с дровами от материнской платы, загрузиться с этого диска и должным образом подготовить дискету. На неё сольётся нужный драйвер и ты его подсунешь установщику windows в самом начале установки, когда появляется надпись "нажмите F6 для установки драйвера SCSI или RAID". Нажмёшь F6 и далее по тексту.<br />
<br />
2. Берёшь тот же драйвер и имплантируешь его в дистрибутив Windows (например, с помощью программы nLite) и пишешь изменённый iso-шник на новую болванку. Дальше просто грузишься с неё и ставишь винду, ошибка не появится.<br />
<br />
Оба способа я успешно использовал по несколько раз.<br />
Желаю удачи.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/42/" target="_blank"><strong>Разные вопросы</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/436/" target="_blank"><strong>min@y™</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4539/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4536 (эксперт: Вадим К)</title>
	<link>http://expert.delphi.int.ru/question/4536/</link>
	<guid>http://expert.delphi.int.ru/question/4536/</guid>
	<pubDate>Wed, 25 Aug 2010 15:52:52 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, padonak!<br />
в коде есть одна явная ошибка, и одна потенциальная.<br />
явная заключается в том, что если мы экспортируем функцию как stdcall, то нужно так ее в dll и отдавать. Поэтому либо в dll при объявлении функции пишем так<br />
<pre class="delphi-1"><span style="color: #0000FF;">procedure</span> RunStopHook<span style="color: #000000;">&#40;</span>State : Boolean<span style="color: #000000;">&#41;</span>; <span style="color: #0000FF;">stdcall</span>;
&nbsp;
<span style="color: #0000FF;">begin</span>
&nbsp;
<span style="color: #0000FF;">end</span>;
&nbsp;
exports RunStopHook index <span style="color: #DD0000;">1</span>;</pre>
Либо убираем stdcall в обоих местах.<br />
<br />
Неявная ошибка заключается в типе boolean. Вообще то с ним проблем не должно быть, но это не windows тип. Правильный тип выглядит так LongBool,тогда и другие языки программирования точно смогут использовать эту библиотеку.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/3/" target="_blank"><strong>Оболочка Delphi, компилятор, версии среды и т.д.</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/192/" target="_blank"><strong>Вадим К</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4536/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4534 (эксперт: Вадим К)</title>
	<link>http://expert.delphi.int.ru/question/4534/</link>
	<guid>http://expert.delphi.int.ru/question/4534/</guid>
	<pubDate>Wed, 25 Aug 2010 12:15:15 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, Мусабаев Равиль!<br />
идем сюда <a href="http://www.torry.net/pages.php?id=519" target="_blank">http://www.torry.net/pages.php?id=519</a><br />
ищем DCPcrypt v.2.0 Beta 3, качаем. там есть много, чего понадобиться:<br />
Blowfish, <strong>Twofish</strong>, Cast-128, Cast-256, DES, 3DES, Ice, Thin Ice, Ice2, IDEA, Mars, Misty1, RC2, RC4, RC5, RC6, Rijndael (the new AES), Serpent, TEA, Haval, MD4, MD5, RipeMD-128, RipeMD-160,SHA-1, SHA-256, SHA-384, SHA-512, Tiger.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/11/" target="_blank"><strong>Алгоритмы, преобразования</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/192/" target="_blank"><strong>Вадим К</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4534/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4532 (эксперт: Вадим К)</title>
	<link>http://expert.delphi.int.ru/question/4532/</link>
	<guid>http://expert.delphi.int.ru/question/4532/</guid>
	<pubDate>Tue, 24 Aug 2010 18:39:34 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, SOA!<br />
Вообще то я рекомендовал бы взять TList и не заниматься изобретением велосипедов. Там просто.<br />
вначале создам<br />
list := TList.create;<br />
<br />
добавляем<br />
list.add(button);<br />
<br />
удаляем по индексу<br />
but := TButton(list[i]);<br />
but.free;<br />
list.delete(i);<br />
<br />
удалим list в конце работы<br />
list.free;<br />
правда перед этим не забываем почистить оставшиеся элементы.<br />
<br />
<br />
Если по коду, то тут есть базовое недопонимание. Оно в строках<br />
Element:=ElementP^;<br />
Element.prev:=@Ferst;<br />
<br />
В первой строке объект копируется, это же запись.<br />
и когда в следующей строке делается присваивание, то исходный объект, куда указывает ElementP^ не изменяется! И так как указатель указывает неведомо куда, получаем в лоб.<br />
нужно первую строку выкинуть, а в второй писать так<br />
ElementP^.prev:=@Ferst;
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/12/" target="_blank"><strong>Работа с компонентами и библиотеками</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/192/" target="_blank"><strong>Вадим К</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4532/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4531 (эксперт: bugmenot)</title>
	<link>http://expert.delphi.int.ru/question/4531/</link>
	<guid>http://expert.delphi.int.ru/question/4531/</guid>
	<pubDate>Tue, 24 Aug 2010 11:39:41 +0400</pubDate>
	<description><![CDATA[
	&gt; никак не используется самой delphi<br />
Не Delphi, а VCL, если точнее. Собственно, Tag существует исключительно для хранения пользовательского значения типа Longint, а поскольку SizeOf(Longint) = SizeOf(Pointer) - свойство получается действительно полезным.<br />
<br />
Хотя предложенное решение мне не нравится потому что придется разводить кучу волшебных чисел и следить чтобы в форме и модуле они совпадали. А константы использовать нельзя потому что дизайнер о них ничего не знает.<br />
<br />
Собственно, твоя проблема решается проще (в case можно использовать только константы, поэтому else if):
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/11/" target="_blank"><strong>Алгоритмы, преобразования</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/4223/" target="_blank"><strong>bugmenot</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4531/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4531 (эксперт: Егор)</title>
	<link>http://expert.delphi.int.ru/question/4531/</link>
	<guid>http://expert.delphi.int.ru/question/4531/</guid>
	<pubDate>Tue, 24 Aug 2010 04:55:50 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, padonak!<br />
Проще всего воспользоваться свойством tag, которое есть у каждого компонента и никак не используется самой delphi. Нужное значение в это свойство можно записать на этапе проектирования, в инспекторе объектов.<br />
А потом в обработчике проверять:<br />
<pre class="delphi-1"><span style="color: #0000FF;">procedure</span> TForm1.<span style="color: #000000;">Button1Click</span><span style="color: #000000;">&#40;</span>Sender: TObject<span style="color: #000000;">&#41;</span>;
<span style="color: #0000FF;">var</span> s: AnsiString;
<span style="color: #0000FF;">begin</span>
  <span style="color: #0000FF;">case</span> TButton<span style="color: #000000;">&#40;</span>Sender<span style="color: #000000;">&#41;</span>.<span style="color: #000000;">Tag</span> <span style="color: #0000FF;">of</span>
    <span style="color: #DD0000;">1</span>: s:=<span style="color: #DD3700;">'первая кнопка'</span>;
    <span style="color: #DD0000;">2</span>: s:=<span style="color: #DD3700;">'вторая кнопка'</span>;
    <span style="color: #DD0000;">3</span>: s:=<span style="color: #DD3700;">'третья кнопка'</span>;
    <span style="color: #0000FF;">else</span> s:=<span style="color: #DD3700;">'непонятная кнопка'</span>;
  <span style="color: #0000FF;">end</span>;
...
<span style="color: #0000FF;">end</span>;</pre>
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/11/" target="_blank"><strong>Алгоритмы, преобразования</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/3318/" target="_blank"><strong>Егор</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4531/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4529 (эксперт: Вадим К)</title>
	<link>http://expert.delphi.int.ru/question/4529/</link>
	<guid>http://expert.delphi.int.ru/question/4529/</guid>
	<pubDate>Mon, 23 Aug 2010 18:20:02 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, Ермаханов Айбек!<br />
ну тогда есть такие пути<br />
- примитивный: поставить в надежном месте свой комп. договориться с провайдером в о выделении IP адреса и достаточного канала в интернет (нужно помнить, что в данном случае важна не скорость скачки, а скорость отдачи). Дальше регистрируется доменное имя (провайдер с этим может помочь) и устанавливается подходящий софт. В принципе комп может стоять хоть дома, хоть у провайдера (у провайдера надежнее).<br />
- вариант сложнее - покупается выделенный сервер (дедик) или виртуальный хостинг. <br />
- вариант красивее - есть специальные хостинги, кто хочет сделать свой маленький бизнес на хостинге - гуглить по слову "ресселинг хостинга".
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/42/" target="_blank"><strong>Разные вопросы</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/192/" target="_blank"><strong>Вадим К</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4529/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4528 (эксперт: Вадим К)</title>
	<link>http://expert.delphi.int.ru/question/4528/</link>
	<guid>http://expert.delphi.int.ru/question/4528/</guid>
	<pubDate>Mon, 23 Aug 2010 17:10:46 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, Aleksandra!<br />
В принципе особых проблем не вижу. Если картинку загрузили в Image или Bitmap, то с помощью свойства Pixels[col, row] можно узнать цвет текущего пикселя.<br />
Дальше, судя с рисунка, нужна только половина пикселей. В целом, код можно написать.<br />
Припустим, что у нас в Image1 загружена картинка (да, gif так просто не загрузишь, но bmp, jpg - без проблем.а gif потом можно добавить без проблем.)<br />
код загрузки такой<br />
<pre class="delphi-1"><span style="color: #0000FF;">if</span> OpenDialog1.<span style="color: #000000;">execute</span> <span style="color: #0000FF;">then</span> Image1.<span style="color: #000000;">canvas</span>.<span style="color: #000000;">loadFromFile</span><span style="color: #000000;">&#40;</span>opendialog1.<span style="color: #000000;">filename</span><span style="color: #000000;">&#41;</span>;</pre>
Саму картинку будем рисовать в Image2, который лучше положить в scrollbox<br />
<pre class="delphi-1"><span style="color: #0000FF;">const</span> r:integer = <span style="color: #DD0000;">10</span>; <span style="color: #006600;">//размер одной бисеринки.</span>
<span style="color: #0000FF;">var</span> i, j:integer;
<span style="color: #0000FF;">begin</span>
<span style="color: #006600;">//выставим размеры</span>
  image2.<span style="color: #000000;">width</span> := image1.<span style="color: #000000;">width*r</span>;
  image2.<span style="color: #000000;">height</span> := image1.<span style="color: #000000;">height*r</span>;
  image2.<span style="color: #000000;">canvas</span>.<span style="color: #000000;">pen</span>.<span style="color: #000000;">color</span> := clBlack; <span style="color: #006600;">//цвет границы бусинки.</span>
<span style="color: #006600;">//рисуем бусинки</span>
  <span style="color: #0000FF;">for</span> i := <span style="color: #DD0000;">0</span> <span style="color: #0000FF;">to</span> image1.<span style="color: #000000;">width</span><span style="color: #DD0000;">-1</span> <span style="color: #0000FF;">do</span>
    <span style="color: #0000FF;">for</span> j := <span style="color: #DD0000;">0</span> <span style="color: #0000FF;">to</span> image1.<span style="color: #000000;">height</span><span style="color: #DD0000;">-1</span> <span style="color: #0000FF;">do</span>
      <span style="color: #0000FF;">if</span> odd<span style="color: #000000;">&#40;</span>i + j<span style="color: #000000;">&#41;</span> <span style="color: #0000FF;">then</span> <span style="color: #0000FF;">begin</span> <span style="color: #006600;">// здесь можно писать и not odd(i + j), что бы рисовать чуточку по другому</span>
        image2.<span style="color: #000000;">canvas</span>.<span style="color: #000000;">brush</span>.<span style="color: #000000;">color</span> := image1.<span style="color: #000000;">canvas</span>.<span style="color: #000000;">pixels</span><span style="color: #000000;">&#91;</span>i,j<span style="color: #000000;">&#93;</span>;
        image2.<span style="color: #000000;">canvas</span>.<span style="color: #000000;">ellipse</span><span style="color: #000000;">&#40;</span>i*r, j*r, <span style="color: #000000;">&#40;</span>i<span style="color: #DD0000;">+1</span><span style="color: #000000;">&#41;</span>*r, <span style="color: #000000;">&#40;</span>j<span style="color: #DD0000;">+1</span><span style="color: #000000;">&#41;</span>*r<span style="color: #000000;">&#41;</span>;
      <span style="color: #0000FF;">end</span>;
<span style="color: #0000FF;">end</span>;</pre>
<br />
И все. но бусинки будут немного на большом растоянии друг от дружки, хотелось, что бы они были поплотнее. Нет ничего невозможного - нужно просто поправить координаты или увеличить размер бусинок. например так<br />
<pre class="delphi-1">image2.<span style="color: #000000;">canvas</span>.<span style="color: #000000;">ellipse</span><span style="color: #000000;">&#40;</span>i*r, j*r, <span style="color: #000000;">&#40;</span>i<span style="color: #DD0000;">+1</span><span style="color: #000000;">&#41;</span>*r+k, <span style="color: #000000;">&#40;</span>j<span style="color: #DD0000;">+1</span><span style="color: #000000;">&#41;</span>*r+k<span style="color: #000000;">&#41;</span>;</pre>
<br />
где k подбирается экспериментальным путем, до получения желаемого результат. при r = 10, рекомендую попробовать k равным 3-4. (более точная формула - k = r * корень_квадратный_2 = r * 1.4)<br />
<br />
Можно пойди ещё дальше и по осям выбрать разные k. в таком случае бусинки будут немного приплюснутые.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/15/" target="_blank"><strong>Прочее</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/192/" target="_blank"><strong>Вадим К</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4528/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4526 (эксперт: bugmenot)</title>
	<link>http://expert.delphi.int.ru/question/4526/</link>
	<guid>http://expert.delphi.int.ru/question/4526/</guid>
	<pubDate>Sun, 22 Aug 2010 22:51:22 +0400</pubDate>
	<description><![CDATA[
	(* var ProcessId: Cardinal; hProcess: THandle; *)<br />
<br />
Win32Check(GetWindowThreadProcessId(hWnd, ProcessId) &lt;&gt; 0);<br />
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessId);<br />
Win32Check(hProcess &lt;&gt; 0);<br />
OutputDebugString(PChar(Format('doen, hProcess = %d', [hProcess])));
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/4/" target="_blank"><strong>Программирование с помощью API</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/4223/" target="_blank"><strong>bugmenot</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4526/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
<item>
	<title>Ответ на вопрос № 4521 (эксперт: Тов. Женька)</title>
	<link>http://expert.delphi.int.ru/question/4521/</link>
	<guid>http://expert.delphi.int.ru/question/4521/</guid>
	<pubDate>Sat, 21 Aug 2010 10:28:14 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, protozo!<br />
Я присоединяюсь к Вадиму и рекомендую вам пользоваться преимуществами, которые предоставляет Interbase.<br />
Со своей стороны могу предложить подход с временными таблицами типа ClientDataSet или MemTableEh.<br />
При формировании заказа необходимые сведения о заказе можно разместить в них, и уже потом при сохранении заказа, запустить транзакцию, внести данные из временной таблицы в реальную, через триггер "списав" необходимое количество товара или сообщить о его недостаточности.<br />
Опять же тут можно поиграться с фиксацией транзакции. Можно ее коммитить после каждой записи, или же блоком - после внесения всех записей. Первый подход несколько повышает нагрузку на сервер, но дает возможность сохранить какую-то часть заказа в случае потери связи с сервером. Во втором случае нагрузка снижается (всего одна транзакция), но и в случае чего заказ придется полностью перезабивать.<br />
<br />
В общем случае такой подход имеет и недостаток. Суть его заключается в том, что записи не блокируются и выбранный вами товар сможет "перехватить" другой заказчик. <br />
Можно, конечно, поступить, как предложил Вадим, заблокировать нужные записи через транзакции и сколь угодно долго с ними развлекаться. Но такой подход не позволит другим пользователям обратиться к этому же товару, они будут вынуждены ждать завершения вашей транзакции. А вдруг она затянется?<br />
<br />
Если же попробовать совместить эти два варианта, и помня, что читающие транзакции могут быть сколь угодно длинными, а пишущие максимально короткими, то получим следующее. В момент выбора товара, списываем сразу же необходимое количество (тогда другие заказчики уже не перехватят ваш товар и смогут работать с тем, что осталось), вносим данные по выбранному товару во временную таблицу. В конце, когда заказ окончательно подтвержден, из временной таблицы вносим данные в реальную таблицу одним из предложенных в начале способов. А в случае отмены. опираясь на те же сведения из временной таблицы, возвращаем товар на место.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/6/" target="_blank"><strong>Программирование баз данных (БД)</strong></a><br />
	Автор ответа: <a href="http://expert.delphi.int.ru/user/2733/" target="_blank"><strong>Тов. Женька</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/4521/" target="_blank"><strong>Страница и мини-форум вопроса &raquo;</strong></a>
	]]>
	</description>
	<author>admin@delphi.int.ru</author>
	<source url="http://expert.delphi.int.ru/rss/answers.rss">Delphi.int.ru Expert</source>
</item>
</channel>
</rss>