<?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, 17 May 2012 20:25:00 +0400</lastBuildDate>
	<copyright>Copyright (C) 2004-2012 Delphi.int.ru</copyright>
	<managingEditor>admin@delphi.int.ru</managingEditor>
	<webMaster>admin@delphi.int.ru</webMaster>
	<pubDate>Thu, 17 May 2012 20:25:00 +0400</pubDate>
	<category>Programming</category>
	<generator>http://expert.delphi.int.ru - RSS Generator</generator>
	<ttl>180</ttl>
<item>
	<title>Ответ на вопрос № 6144 (эксперт: Мережников Андрей)</title>
	<link>http://expert.delphi.int.ru/question/6144/</link>
	<guid>http://expert.delphi.int.ru/question/6144/</guid>
	<pubDate>Thu, 17 May 2012 20:22:47 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, stales!<br />
используя ключевое слово group:<br />
примерно так:<br />
<pre class="sql-1" style="font-family:monospace;"><span style="color: #0066CC; font-weight: bold;">SELECT</span> <span style="color: #006600;">&lt;</span>наименование<span style="color: #006600;">&gt;</span>,sum<span style="color: #006600;">&#40;</span><span style="color: #006600;">&lt;</span>вес<span style="color: #006600;">&gt;</span><span style="color: #006600;">&#41;</span> <span style="color: #0066CC; font-weight: bold;">AS</span> sweight
<span style="color: #0066CC; font-weight: bold;">FROM</span> <span style="color: #006600;">&lt;</span>имя таблицы<span style="color: #006600;">&gt;</span>
<span style="color: #0066CC; font-weight: bold;">GROUP</span> <span style="color: #0066CC; font-weight: bold;">BY</span> <span style="color: #006600;">&lt;</span>наименование<span style="color: #006600;">&gt;</span></pre>
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/6/"><strong>Программирование баз данных (БД)</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/294/"><strong>Мережников Андрей</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6144/"><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>Ответ на вопрос № 6143 (эксперт: Вадим К)</title>
	<link>http://expert.delphi.int.ru/question/6143/</link>
	<guid>http://expert.delphi.int.ru/question/6143/</guid>
	<pubDate>Thu, 17 May 2012 14:01:56 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, Shouldercannon!<br />
<pre class="delphi-1" style="font-family:monospace;"><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>
  Answer: TMyDataArr;
  i: Integer;
<span style="color: #0000FF;">begin</span>
  <span style="color: #006600;">//SetLength(Answer, 2); никому не нужно</span>
  Answer := Test<span style="color: #000000;">&#40;</span><span style="color: #DD3700;">'000@001#002$003%0&amp;'</span><span style="color: #000000;">&#41;</span>; <span style="color: #006600;">// Incompatible types</span>
<span style="color: #0000FF;">end</span>;</pre>
Answer1: TMyDataArr; и Answer2: array of string; - это абсолютно два разных типа с точки зрения компилятора. Хотя они абсолютно идентичны для программиста.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/2/"><strong>Общие вопросы по программированию</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/192/"><strong>Вадим К</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6143/"><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>Ответ на вопрос № 6139 (эксперт: min@y™)</title>
	<link>http://expert.delphi.int.ru/question/6139/</link>
	<guid>http://expert.delphi.int.ru/question/6139/</guid>
	<pubDate>Wed, 16 May 2012 15:12:16 +0400</pubDate>
	<description><![CDATA[
	Ну вот. У твоего AdoTable есть свойства RecNo, Bof, Eof, и методы First(), Last(), Next(), Prior().<br />
Ещё рекомендую воспользоваться методами DisableControls() - перед циклом, и EnableControls() - после него. Примерно так:<br />
<pre class="delphi-1" style="font-family:monospace;"><span style="color: #0000FF;">var</span>
  CurrentNo: Integer;
<span style="color: #0000FF;">begin</span>
  Table.<span style="color: #000000;">DisableControls</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
  <span style="color: #0000FF;">try</span>
    CurrentNo:= Table.<span style="color: #000000;">RecNo</span>; <span style="color: #006600;">// запоминаешь текущую позицию</span>
    Table.<span style="color: #000000;">First</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>; <span style="color: #006600;">// переход к первой записи таблицы</span>
&nbsp;
    <span style="color: #006600;">// твой цикл</span>
    <span style="color: #0000FF;">while</span> <span style="color: #0000FF;">not</span> Table.<span style="color: #000000;">Eof</span> <span style="color: #0000FF;">do</span>
      <span style="color: #0000FF;">begin</span>
        <span style="color: #006600;">// * &lt;--- здесь твоя работа с полями текущей записи</span>
        Table.<span style="color: #000000;">Next</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>; <span style="color: #006600;">// переход к следующей записи</span>
      <span style="color: #0000FF;">end</span>;
  <span style="color: #0000FF;">finally</span>
    Table.<span style="color: #000000;">RecNo</span>:= CurrentNo; <span style="color: #006600;">// восстанавливаешь текущую позицию</span>
    Table.<span style="color: #000000;">EnableControls</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
  <span style="color: #0000FF;">end</span>;
<span style="color: #0000FF;">end</span>;</pre>
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/6/"><strong>Программирование баз данных (БД)</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/436/"><strong>min@y™</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6139/"><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>Ответ на вопрос № 6135 (эксперт: Вадим К)</title>
	<link>http://expert.delphi.int.ru/question/6135/</link>
	<guid>http://expert.delphi.int.ru/question/6135/</guid>
	<pubDate>Tue, 15 May 2012 11:49:49 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, casio!<br />
Сказать " в си эта функция есть" - это неверно. Ее нет в Си. Это точно, сколько не ищите. Она есть в библиотеке GD, у которой есть си интерфейс.<br />
смотрим описание resource imagecreatetruecolor (int x_size, int y_size) - она создает просто изображение заданного размера. В делфи для этого нормально использовать TBitmap и код вида<br />
<pre class="delphi-1" style="font-family:monospace;"><span style="color: #0000FF;">var</span> bmp:TBitmap;
<span style="color: #0000FF;">begin</span>
  bmp:=TBitmap.<span style="color: #000000;">create</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
  bmp.<span style="color: #000000;">wtidth</span> := <span style="color: #DD0000;">8</span>;
  bmp.<span style="color: #000000;">height</span> := <span style="color: #DD0000;">8</span>;
  <span style="color: #006600;">// возможно еще нужно будет выставить битность изображения</span></pre>
imagecopyresampled - это обычный copyrect, метод TBitmap<br />
imagecolorat - это просто вызов Pixels[x,y]<br />
<br />
Но вот только что бы все это переписать, нужно осмыслить алгоритм кода и потом переписать.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/2/"><strong>Общие вопросы по программированию</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/192/"><strong>Вадим К</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6135/"><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>Ответ на вопрос № 6126 (эксперт: stales)</title>
	<link>http://expert.delphi.int.ru/question/6126/</link>
	<guid>http://expert.delphi.int.ru/question/6126/</guid>
	<pubDate>Fri, 11 May 2012 17:39:07 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, Ромашка! Вот мой рабочий пример полного удаления данных. Только этот код я писал для таблицы Paradox, ну для Access<br />
 не сложно переделать.<br />
<br />
procedure TForm1.Action11Execute(Sender: TObject);  //Нажатие на кнопку на ленте Ribbon<br />
  begin<br />
if MessageDlg('Удалить все данные из таблицы?', mtConfirmation, [mbOK, mbCancel],0) = mrOk then<br />
begin<br />
    with Table1 do<br />
      begin<br />
        Active:= False;<br />
        Exclusive:= True; // перевод таблицы в эксклюзивный набор данных<br />
        Active:= True;<br />
          try<br />
            EmptyTable;   // сама процедура очищения таблицы<br />
          except<br />
            ShowMessage('Не удается очистить таблицу!');<br />
          end;<br />
        Active:= False;<br />
        Exclusive:= False;<br />
        Active:= True;<br />
      end;
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/6/"><strong>Программирование баз данных (БД)</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/5106/"><strong>stales</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6126/"><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>Ответ на вопрос № 6121 (эксперт: min@y™)</title>
	<link>http://expert.delphi.int.ru/question/6121/</link>
	<guid>http://expert.delphi.int.ru/question/6121/</guid>
	<pubDate>Fri, 11 May 2012 15:14:22 +0400</pubDate>
	<description><![CDATA[
	Ладно, хорош стебаться. Вот <a href="http://ru.wikipedia.org/wiki/%D0%A4%D0%B0%D0%B9%D0%BB">ответ</a> на вопрос.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/42/"><strong>Разные вопросы</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/436/"><strong>min@y™</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6121/"><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>Ответ на вопрос № 6127 (эксперт: Вадим К)</title>
	<link>http://expert.delphi.int.ru/question/6127/</link>
	<guid>http://expert.delphi.int.ru/question/6127/</guid>
	<pubDate>Thu, 10 May 2012 16:28:55 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, Бородеев Илья Вадимович!<br />
Да, может. Кто ему мешает? Более того, классический пример - конструктор класса (который как раз является классовым методом, просто немного нестандартным).<br />
<br />
Что бы понять, как может быть классовый метод виртуальным, нужно понять, что в делфи есть понятие метакласса. А так как метаклассы наследуют друг друга точно также как обычные классы, то и виртуальные методы работают практически также, но только если обычный виртуальный метод применяется к объекту, то классовый виртуальный метод к классу.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/2/"><strong>Общие вопросы по программированию</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/192/"><strong>Вадим К</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6127/"><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>Ответ на вопрос № 6124 (эксперт: DNK)</title>
	<link>http://expert.delphi.int.ru/question/6124/</link>
	<guid>http://expert.delphi.int.ru/question/6124/</guid>
	<pubDate>Thu, 10 May 2012 12:37:15 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, Бородеев Илья Вадимович!<br />
А я попробую объяснить на пальцах, почему адрес на этапе компиляции не известен. Допустим есть перменная типа <strong>a: TSrings</strong> и есть код в котором происходит кроме прочего очистка списка строк <strong>a.Clear;</strong>. Данный метод в классе <strong>TStrings</strong> описан как виртуальный и ещё пуще того абстрактный.<br />
Так спрашивается какой адрес для вызова здесь компилятору поставить? Веть в данную переменную на этапе выполнения может попасть экземпляр любого из его потомков (TStringList, TTabStrings, TTreeStrings, TRichEditStrings, TPageAccess и тд. и тп.) и у каждого свой метод очистки. Вот тогда нас и выручают таблицы виртуальных методов, на элемент в которой и может сослаться компилятор.<br />
Получается на этапе выполнения у нас имеются только переменная-указатель на объект и некий ключ к таблице виртуальных методов. По адресу в переменной находят конкретный экземпляр объекта, затем определяются его класс и таблица виртуальных методов, а уже затем происходит поиск адреса кода для очистки в таблице, на элемент которой сослался компилятор.<br />
<br />
ЗЫ. Поправте если что, из головы брал.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/2/"><strong>Общие вопросы по программированию</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/348/"><strong>DNK</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6124/"><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>Ответ на вопрос № 6124 (эксперт: min@y™)</title>
	<link>http://expert.delphi.int.ru/question/6124/</link>
	<guid>http://expert.delphi.int.ru/question/6124/</guid>
	<pubDate>Thu, 10 May 2012 08:12:43 +0400</pubDate>
	<description><![CDATA[
	<strong>Типы методов</strong><br />
Методы объекта могут быть описаны как статические (static), виртуальные (virtual), динамические (dinamic) или как методы-сообщения (message). Рассмотрим следующий пример:<br />
<br />
<pre class="delphi-1" style="font-family:monospace;">TFoo = <span style="color: #0000FF;">class</span>
  <span style="color: #0000FF;">procedure</span> IAmAStatic;
  <span style="color: #0000FF;">procedure</span> IAmAVirtual; <span style="color: #0000FF;">virtual</span>;
  <span style="color: #0000FF;">procedure</span> IAmADynamic; dynamic;
  <span style="color: #0000FF;">procedure</span> IAmAMessage<span style="color: #000000;">&#40;</span><span style="color: #0000FF;">var</span> M: TMessage<span style="color: #000000;">&#41;</span>; <span style="color: #0000FF;">message</span> wmSomeMessage; 
<span style="color: #0000FF;">end</span>;</pre>
<br />
<span style="text-decoration: underline;">Статические методы</span><br />
Статический метод lAmAStatic работает подобно обычной процедуре или функции. Этот тип методов принимается по умолчанию. Адрес такого метода известен уже на стадии компиляции, и компилятор в тексте программы оформляет все вызовы данного метода как статические. Такие методы работают быстрее других, однако не могут быть перегружены с целью поддержки полиморфизма объектов.<br />
<br />
<span style="text-decoration: underline;">Виртуальные методы</span><br />
Метод IAmAVirtual объявлен как виртуальный. Вызов таких методов, благодаря возможности их перегрузки, немного сложнее, чем вызов статического метода, так как во время компиляции адрес конкретного вызываемого метода не известен. Для решения этой задачи компилятор строит таблицу виртуальных методов (Virtual Method Table, VMT), которая обеспечивает определение адреса метода в процессе выполнения программы. VMT содержит все виртуальные методы предка и виртуальные методы самого объекта, и потому виртуальные методы используют несколько большую память, чем методы динамические, но при этом их вызов происходит быстрее, чем вызов динамических методов.<br />
<br />
<span style="text-decoration: underline;">Динамические методы</span><br />
Динамический метод IAmADynamic в целом подобен виртуальным методам, но обслуживается другой диспетчерской системой. Каждому динамическому методу компилятор назначает уникальное число и использует его вместе с адресом метода для построения таблицы динамических методов (Dynamic Method Table — DMT). В отличие от VMT, DMT содержит только методы данного объекта, благодаря этому обеспечивается экономия используемой памяти, но одновременно замедляется вызов метода, поскольку для поиска его адреса, скорее всего, будет пересмотрена не одна DMT в иерархии объектов.<br />
<br />
© С. Тейксейра & К. Пачеко.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/2/"><strong>Общие вопросы по программированию</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/436/"><strong>min@y™</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6124/"><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>Ответ на вопрос № 6123 (эксперт: bugmenot)</title>
	<link>http://expert.delphi.int.ru/question/6123/</link>
	<guid>http://expert.delphi.int.ru/question/6123/</guid>
	<pubDate>Wed, 09 May 2012 19:10:38 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, Бородеев Илья Вадимович!<br />
Это описан <strong>классовый</strong> метод. Статическими же являются все невиртуальные методы экземпляра. В качестве иллюстрации см. System.TObject.Free:<br />
<pre class="delphi-1" style="font-family:monospace;"><span style="color: #0000FF;">procedure</span> TObject.<span style="color: #000000;">Free</span>;
<span style="color: #0000FF;">begin</span>
  <span style="color: #0000FF;">if</span> Self &lt;&gt; <span style="color: #0000FF;">nil</span> <span style="color: #0000FF;">then</span>
    Destroy;
<span style="color: #0000FF;">end</span>;</pre>
который вызывает виртуальный деструктор экземпляра. Таким образом:<br />
<pre class="delphi-1" style="font-family:monospace;"><span style="color: #0000FF;">var</span> 
  o: TStrings; <span style="color: #006600;">{ например }</span>
<span style="color: #0000FF;">begin</span>
  o := <span style="color: #0000FF;">nil</span>;
  o.<span style="color: #000000;">Free</span>;  <span style="color: #006600;">{ метод статический и исключение не выкинет! }</span>
<span style="color: #0000FF;">end</span>.</pre>
<br />
Почитайте здесь про типы связывания методов<br />
<a href="http://docwiki.embarcadero.com/RADStudio/en/Methods#Method_Binding" onclick="return !window.open(this.href)">http://docwiki.embarcadero.com/RADStudio/en/Methods#Method_Binding</a><br />
а ниже есть про классовые методы
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/15/"><strong>Прочее</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/4223/"><strong>bugmenot</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6123/"><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>Ответ на вопрос № 6119 (эксперт: Вадим К)</title>
	<link>http://expert.delphi.int.ru/question/6119/</link>
	<guid>http://expert.delphi.int.ru/question/6119/</guid>
	<pubDate>Mon, 07 May 2012 11:06:09 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, Shouldercannon!<br />
Есть два способа - правильное завершение и завершение с извращением. Второй способ подразумевает убивания потока, но при этом убивают его "зверски" и никто не гарантирует, что основная программа выживет. Поэтому этот способ не рекомендуется. (выглядит он так <pre class="delphi-1" style="font-family:monospace;">TerminateThread<span style="color: #000000;">&#40;</span>имя_потока.<span style="color: #000000;">ThreadId</span><span style="color: #000000;">&#41;</span>;</pre>)<br />
<br />
Правильный способ заключается в том, что поток должен сам завершить себя. Для этого у делфовской реализации потоков есть поле Terminated. Поток должен время от времени проверять это поле на true и если это так, то должен завершать свою работу (в общем случае - просто подчистить свои ресурсы и вызвать exit).<br />
<br />
А тот, кому нужно, что бы поток завершился, просто вызывает <pre class="delphi-1" style="font-family:monospace;">имя_потока.<span style="color: #000000;">Terminate</span>;</pre>. Но никто не гарантирует, что поток сразу завершится (потоку туда ещё нужно дойти, проверить условие, завершиться). Если нужно дождаться завершения потока, то пишем так<br />
<pre class="delphi-1" style="font-family:monospace;">имя_потока.<span style="color: #000000;">Terminate</span>;
имя_потока.<span style="color: #000000;">WaitFor</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</pre>
Но только нужно понимать, что WaitFor - блокирующая операция и будет подтормаживать интерфейс (но если поток завершится быстро, то никаких проблем).
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/2/"><strong>Общие вопросы по программированию</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/192/"><strong>Вадим К</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6119/"><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>Ответ на вопрос № 6101 (эксперт: Егор)</title>
	<link>http://expert.delphi.int.ru/question/6101/</link>
	<guid>http://expert.delphi.int.ru/question/6101/</guid>
	<pubDate>Sat, 05 May 2012 04:55:34 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, Глухов Денис!<br />
<br />
Способ первый, он же самый правильный.<br />
Размещаете базу на выделенном компьютере. К этому компьютеру могут иметь доступ очень ограниченное число людей. Это будет сервер. На нём запускается система управления базой данных (СУБД). Все остальные компьютеры подключаются к этой базе данных по сети. Соответственно, каждому подключившемуся отдаются лишь те данные, к которым он имеет доступ. Возможно, нужно будет ограничить ещё и объём данных, который пользователь может скачать за день/неделю. Это чтобы пользователь не смог выкачать всю базу (если он имеет доступ ко всей базе).<br />
На выделенном сервере не должно быть больше ничего запущено - только сервер СУБД.<br />
Как вариант - если СУБД будет слабо нагружена, а мощности копьютера надо использовать более полно, то можно на выделенном сервере разместить несколько виртуальных машин и одну из них целиком отдать базе.<br />
<br />
Способ второй. Намного хуже.<br />
Этот способ для случая, когда база располагается на том же компьютере, за которым сидят пользователи. Создаём нового пользователя - администратора базы данных. Под его учёткой запускается сервер СУБД и постоянно висит в фоне. Такие процессы называют "службами" или "сервисами" (service). Все пользователи соединяются не с базой данных, а с сервером СУБД. Папку администратора базы можно закрыть для доступа всем остальным. Плюс к тому, можно эту папку зашифровать. Тогда даже администратор компьютера не сможет прочитать базу.<br />
Минус - где-то надо хранить пароль учётки администратора базы данных. И, честно говоря, как запускать сервисы под другой учёткой в винде, я не знаю, т.к. не было у меня такой необходимости.<br />
<br />
Способ третий. Комбинированный.<br />
Сервер СУБД запускается в выделенной виртуальной машине. Все клиенты подключаются к этой виртуальной машине. Файловая система на виртуалке шифруется. Так что если кто-то и утащит файл виртуальной машины, всё равно он не сможет открыть файл базы данных.<br />
<br />
Ещё несколько слов.<br />
Хранить учётные записи в самой базе в виде отдельных таблиц - плохо. Авторизация не должна быть перемешана с бизнес-логикой. Не надо создавать отдельные таблицы с именами пользователей и паролями (надеюсь, не в открытом виде?). Microsoft Access поддерживает авторизацию пользователей. Надо пользоваться встроенными возможностями. Тогда открыв базу в аксессе, атакующий увидит предложение авторизоваться, а после авторизации сможет получить доступ только к тем данным, которые ему открыты. Не знаю, насколько легко вскрыть защиту аксесса, особенно последних версий - возможно, Майкрософт хорошо поработала в этом направлении.<br />
<br />
Ну и, <a href="http://www.google.ru/#sclient=psy-ab&hl=ru&newwindow=1&q=защита+баз+данных+access&oq=защита+баз+данных+access&aq=f&aqi=g1g-v1&aql=&gs_l=hp.3..0j0i15.2277.12267.0.13299.37.10.1.0.0.1.1564.5297.0j3j2j1j7-2j1.9.0...0.0.ZkQDiFCUikc&pbx=1&bav=on.2,or.r_gc.r_pw.,cf.osb&fp=a276959e86c7166&biw=1276&bih=838">гугл вам в помощь</a>, конечно же.- там много чего прочитать можно
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/6/"><strong>Программирование баз данных (БД)</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/3318/"><strong>Егор</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6101/"><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>Ответ на вопрос № 6115 (эксперт: Вадим К)</title>
	<link>http://expert.delphi.int.ru/question/6115/</link>
	<guid>http://expert.delphi.int.ru/question/6115/</guid>
	<pubDate>Fri, 04 May 2012 19:28:38 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, Menteur!<br />
Было уже. <a href="http://expert.delphi.int.ru/question/5265/" onclick="return !window.open(this.href)">http://expert.delphi.int.ru/question/5265/</a><br />
Разобрали по косточкам:)
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/18/"><strong>Программирование на Pascal</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/192/"><strong>Вадим К</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6115/"><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>Ответ на вопрос № 6100 (эксперт: Аксион)</title>
	<link>http://expert.delphi.int.ru/question/6100/</link>
	<guid>http://expert.delphi.int.ru/question/6100/</guid>
	<pubDate>Sat, 28 Apr 2012 01:08:51 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, Эдик!<br />
Разбор полетов:<br />
0) Почему в структуре AdressBook  все поля ограничены 50 символами, когда определена константа STR_LEN = 256?<br />
1) Зачем создаются две копии структуры AdressBook: A и man?<br />
2) Для чего в view_contacts введен флаг OK (да ещё и во второй раз называется "Ok")?<br />
3) В функции new_contacts не инкрементируется переменная n, отвечающая за кол-во контактов<br />
4) Не совсем понятно, что делает delete_contacts, то ли удаляет 1 контакт, то ли все.<br />
Самое главное в main:<br />
5) Флажок OK=1 изначально, т.е. while(OK!=1) в конце тела main не выполниться ни разу<br />
6) Ошибка в строчке if((len<strong>=</strong>0)&&(len>1)), должно быть if((len<strong>==</strong>0)&&(len>1))  <br />
7) Почему число вы вводите как строку и работаете потом только с первым символом, причем не верно: case <strong>1</strong> необходимо заменить на case <strong>'1'</strong> и так далее, так как надо сравнивать символы, а не введенный символ с символом с кодом 1.<br />
8) sprintf(A[1].Phone=89637840754) правильно было бы sprintf(A[1].Phone,"%s","89637840754");<br />
<br />
Переделал ваш код на коленке (хотя правильнее было бы написать его полностью с нуля), вроде работает, дальше сами допиливайте.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/41/"><strong>C++</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/1123/"><strong>Аксион</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6100/"><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>Ответ на вопрос № 6093 (эксперт: Толяныч)</title>
	<link>http://expert.delphi.int.ru/question/6093/</link>
	<guid>http://expert.delphi.int.ru/question/6093/</guid>
	<pubDate>Tue, 24 Apr 2012 16:37:19 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, Александр Думов!<br />
   Странно, никто не отвечает...<br />
   Я тоже не люблю решать задачи вместо студентов, но эта показалось мне интересной - давно ничего не интегрировал численными методами. Вот что получилось :<br />
 <br />
Результат работы для А=4, Pmin=1,Pmax=2, Eps= 0.0001<br />
<br />
1.5510 0.3553<br />
1.5537 0.0017<br />
1.5544 0.0004<br />
1.5545 0.0001<br />
1.5546 0.0000<br />
Result = 99.4934<br />
<br />
   Смысл в том, что кубик разбиваем на маленькие кубики, плотность в которых считаем постояннрй и равной плотности в центре кубика. Увеличивая число слоев, уменьшаем тем самым размеры кубика, в пределе получится интеграл по объему. Таким образом получаем средневзвешенную плотность. Умножи ее на объем куба , получаем его массу.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/44/"><strong>Delphi</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/3962/"><strong>Толяныч</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6093/"><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>Ответ на вопрос № 6095 (эксперт: Толяныч)</title>
	<link>http://expert.delphi.int.ru/question/6095/</link>
	<guid>http://expert.delphi.int.ru/question/6095/</guid>
	<pubDate>Tue, 24 Apr 2012 12:06:27 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, Helga_93!<br />
   Непонятно, почему Memo должно быть на Form2, а не там же, где Edit и Button. Ну да ладно. А в Мемо загружается просто : <br />
Memo1.Lines.LoadFromFile ('MyFile.txt') ;<br />
   А  вот с doc может быть облом : там ведь не только тексты могут быть, а и рисунки и пр.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/2/"><strong>Общие вопросы по программированию</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/3962/"><strong>Толяныч</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6095/"><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>Ответ на вопрос № 6094 (эксперт: Вадим К)</title>
	<link>http://expert.delphi.int.ru/question/6094/</link>
	<guid>http://expert.delphi.int.ru/question/6094/</guid>
	<pubDate>Mon, 23 Apr 2012 16:51:03 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, AlexMPEI!<br />
Либо <pre class="cpp-1" style="font-family:monospace;"><span style="color: #339900;">#include &lt;combase.h&gt;</span></pre> либо <pre class="cpp-1" style="font-family:monospace;"><span style="color: #339900;">#include &lt;objbase.h&gt;</span></pre>
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/41/"><strong>C++</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/192/"><strong>Вадим К</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6094/"><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>Ответ на вопрос № 6087 (эксперт: DNK)</title>
	<link>http://expert.delphi.int.ru/question/6087/</link>
	<guid>http://expert.delphi.int.ru/question/6087/</guid>
	<pubDate>Thu, 19 Apr 2012 15:30:29 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, anbaresi!<br />
Integer - понятие растяжимое и в разных случаях может иметь разный размер. Надо выянить чем компилилась dll. Кроме того, для оптимизации взаимодействия памяти и процессора, Delphi добавляет выравнивающие данные в структуры. В структуры, где надо это выравнивание отключить, добавляют ключевое слово <strong>packed</strong>.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/2/"><strong>Общие вопросы по программированию</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/348/"><strong>DNK</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6087/"><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>Ответ на вопрос № 6084 (эксперт: Вадим К)</title>
	<link>http://expert.delphi.int.ru/question/6084/</link>
	<guid>http://expert.delphi.int.ru/question/6084/</guid>
	<pubDate>Wed, 18 Apr 2012 10:39:04 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, Gooddy!<br />
Если потоки будут молотить числа, то создавать их больше кол-ва ядер нет смысла. Если кол-во потоков больше кол-ва ядер, то будет даже замедление.<br />
Если же потоки к примеру заняты тем, что скачивают что то с интернета, потом парсят и отправляют в базу, то тут может быть преимущество. В любом случае, "больше потоков" не всегда приводит к "быстрее работает". Я видел код, в котором создается сотня потоков, но работает медленно по той причине, что тело метода execute содержит один synchronyzed(some_method);. Понятно, что будть хоть 1024 процессора, работать оно быстрее не будет.<br />
<br />
Ждать несколько потоков просто - для этого есть функция <a href="http://www.delphicorner.f9.co.uk/articles/op1.htm">WaitForMultipleObjects</a>.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/2/"><strong>Общие вопросы по программированию</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/192/"><strong>Вадим К</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6084/"><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>Ответ на вопрос № 6079 (эксперт: Чернышев)</title>
	<link>http://expert.delphi.int.ru/question/6079/</link>
	<guid>http://expert.delphi.int.ru/question/6079/</guid>
	<pubDate>Mon, 16 Apr 2012 16:41:05 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, sambod!<br />
Как я понял поле Marka у тебя строкового типа. Поэтому надо значение в свойстве Filter записывать в ковычка. Вот так:<br />
DM.ADOT_Marka.filter:='Marka = '''+DBLookupComboBox1.Text+'''';<br />
<br />
в этом случае строка фильтра будет выглядеть вот так: Marka = 'значение'
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/6/"><strong>Программирование баз данных (БД)</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/4686/"><strong>Чернышев</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6079/"><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>Ответ на вопрос № 6066 (эксперт: min@y™)</title>
	<link>http://expert.delphi.int.ru/question/6066/</link>
	<guid>http://expert.delphi.int.ru/question/6066/</guid>
	<pubDate>Wed, 11 Apr 2012 08:12:47 +0400</pubDate>
	<description><![CDATA[
	Ну, нетронутой, так нетронутой. И без лишнего перераспределения памяти (работать должно в разы быстрее).<br />
<pre class="delphi-1" style="font-family:monospace;"><span style="color: #0000FF;">procedure</span> SplitText<span style="color: #000000;">&#40;</span><span style="color: #0000FF;">const</span> AText: <span style="color: #0000FF;">string</span>; ALines: TStrings<span style="color: #000000;">&#41;</span>;
<span style="color: #0000FF;">var</span>
  Index, Len: Integer;
<span style="color: #0000FF;">begin</span>
  Len:= Length<span style="color: #000000;">&#40;</span>AText<span style="color: #000000;">&#41;</span>;
  Index:= <span style="color: #DD0000;">1</span>;
  ALines.<span style="color: #000000;">Clear</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
  <span style="color: #0000FF;">while</span> Index &lt;= Len <span style="color: #0000FF;">do</span>
    <span style="color: #0000FF;">begin</span>
      ALines.<span style="color: #000000;">Add</span><span style="color: #000000;">&#40;</span>Copy<span style="color: #000000;">&#40;</span>AText, Index, <span style="color: #DD0000;">512</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
      Inc<span style="color: #000000;">&#40;</span>Index, <span style="color: #DD0000;">512</span><span style="color: #000000;">&#41;</span>;
    <span style="color: #0000FF;">end</span>;
<span style="color: #0000FF;">end</span>;
&nbsp;
<span style="color: #006600;">// использование процедурки:</span>
SplitText<span style="color: #000000;">&#40;</span>binMsg, mmoBinMsg1.<span style="color: #000000;">Lines</span><span style="color: #000000;">&#41;</span>;</pre>
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/11/"><strong>Алгоритмы, преобразования</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/436/"><strong>min@y™</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6066/"><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>Ответ на вопрос № 6066 (эксперт: Бубырь Александр Николаевич)</title>
	<link>http://expert.delphi.int.ru/question/6066/</link>
	<guid>http://expert.delphi.int.ru/question/6066/</guid>
	<pubDate>Wed, 11 Apr 2012 00:14:17 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, disillusion!<br />
Как-то так:<br />
<pre class="delphi-1" style="font-family:monospace;">mmoBinMsg1.<span style="color: #000000;">Lines</span>.<span style="color: #000000;">Clear</span>;
<span style="color: #0000FF;">while</span> Length<span style="color: #000000;">&#40;</span>binMsg<span style="color: #000000;">&#41;</span> &gt; <span style="color: #DD0000;">512</span> <span style="color: #0000FF;">do</span> <span style="color: #0000FF;">begin</span>
  mmoBinMsg1.<span style="color: #000000;">Lines</span>.<span style="color: #000000;">Add</span><span style="color: #000000;">&#40;</span>Copy<span style="color: #000000;">&#40;</span>binMsg,<span style="color: #DD0000;">1</span>,<span style="color: #DD0000;">512</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
  Delete<span style="color: #000000;">&#40;</span>binMsg,<span style="color: #DD0000;">1</span>,<span style="color: #DD0000;">512</span><span style="color: #000000;">&#41;</span>;
<span style="color: #0000FF;">end</span>;
<span style="color: #0000FF;">if</span> binMsg&lt;&gt;<span style="color: #DD3700;">''</span> <span style="color: #0000FF;">then</span> mmoBinMsg1.<span style="color: #000000;">Lines</span>.<span style="color: #000000;">Add</span><span style="color: #000000;">&#40;</span>binMsg<span style="color: #000000;">&#41;</span>;</pre>
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/11/"><strong>Алгоритмы, преобразования</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/351/"><strong>Бубырь Александр Николаевич</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6066/"><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>Ответ на вопрос № 6061 (эксперт: DNK)</title>
	<link>http://expert.delphi.int.ru/question/6061/</link>
	<guid>http://expert.delphi.int.ru/question/6061/</guid>
	<pubDate>Tue, 10 Apr 2012 22:56:37 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, skew!<br />
Нужно использовать функции <strong>FloatToStrF</strong> или <strong>format</strong>.
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/11/"><strong>Алгоритмы, преобразования</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/348/"><strong>DNK</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6061/"><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>Ответ на вопрос № 6064 (эксперт: DNK)</title>
	<link>http://expert.delphi.int.ru/question/6064/</link>
	<guid>http://expert.delphi.int.ru/question/6064/</guid>
	<pubDate>Tue, 10 Apr 2012 21:19:14 +0400</pubDate>
	<description><![CDATA[
	Здравствуйте, disillusion!<br />
Инициализировать массивы указанным способом можно только через константы или константные выражения. А для объектов в паскале константа увы только одна -- <strong>nil</strong>.<br />
Потому инициализировать конкретными значениями можно только в коде, например в обработчике событий <strong><em>OnCreate</em></strong>.<br />
<pre class="delphi-1" style="font-family:monospace;"><span style="color: #0000FF;">procedure</span> TForm1.<span style="color: #000000;">FormCreate</span><span style="color: #000000;">&#40;</span>Sender: TObject<span style="color: #000000;">&#41;</span>;
<span style="color: #0000FF;">begin</span>
  gp<span style="color: #000000;">&#91;</span><span style="color: #DD0000;">0</span><span style="color: #000000;">&#93;</span> := grpDescription;
  gp<span style="color: #000000;">&#91;</span><span style="color: #DD0000;">1</span><span style="color: #000000;">&#93;</span> := grp1
<span style="color: #0000FF;">end</span>;</pre>
или так<br />
<pre class="delphi-1" style="font-family:monospace;"><span style="color: #0000FF;">procedure</span> SetGp<span style="color: #000000;">&#40;</span>Arg: <span style="color: #0000FF;">array</span> <span style="color: #0000FF;">of</span> TCheckBox<span style="color: #000000;">&#41;</span>;
<span style="color: #0000FF;">var</span> i: integer;
<span style="color: #0000FF;">begin</span>
  <span style="color: #0000FF;">for</span> i := <span style="color: #DD0000;">0</span> <span style="color: #0000FF;">to</span> Length<span style="color: #000000;">&#40;</span>Arg<span style="color: #000000;">&#41;</span> - <span style="color: #DD0000;">1</span> <span style="color: #0000FF;">do</span>
    gp<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span> := Arg<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span>;
<span style="color: #0000FF;">end</span>;
&nbsp;
<span style="color: #0000FF;">procedure</span> TForm1.<span style="color: #000000;">FormCreate</span><span style="color: #000000;">&#40;</span>Sender: TObject<span style="color: #000000;">&#41;</span>;
<span style="color: #0000FF;">begin</span>
  SetGp<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span>CheckBox1, CheckBox2<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #0000FF;">end</span>;</pre>
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/2/"><strong>Общие вопросы по программированию</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/348/"><strong>DNK</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6064/"><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>Ответ на вопрос № 6062 (эксперт: min@y™)</title>
	<link>http://expert.delphi.int.ru/question/6062/</link>
	<guid>http://expert.delphi.int.ru/question/6062/</guid>
	<pubDate>Mon, 09 Apr 2012 17:09:10 +0400</pubDate>
	<description><![CDATA[
	Ахтунг! Писал на коленке, не отлаживал (нет времени, рабочий день кончается).<br />
<pre class="delphi-1" style="font-family:monospace;"><span style="color: #0000FF;">function</span> IntToBin<span style="color: #000000;">&#40;</span>Value: Int64; Digits: Integer<span style="color: #000000;">&#41;</span>: <span style="color: #0000FF;">string</span>;
<span style="color: #0000FF;">var</span>
  Index: Integer;
<span style="color: #0000FF;">begin</span>
  SetLength<span style="color: #000000;">&#40;</span>Result, Digits<span style="color: #000000;">&#41;</span>;
  FillChar<span style="color: #000000;">&#40;</span>Result<span style="color: #000000;">&#91;</span><span style="color: #DD0000;">1</span><span style="color: #000000;">&#93;</span>, Digits, <span style="color: #DD3700;">'0'</span><span style="color: #000000;">&#41;</span>;
  Index:= Digits;
&nbsp;
  <span style="color: #0000FF;">while</span> <span style="color: #000000;">&#40;</span>Value &lt;&gt; <span style="color: #DD0000;">0</span><span style="color: #000000;">&#41;</span> <span style="color: #0000FF;">and</span> <span style="color: #000000;">&#40;</span>Index &gt; <span style="color: #DD0000;">0</span><span style="color: #000000;">&#41;</span> <span style="color: #0000FF;">do</span>
    <span style="color: #0000FF;">begin</span>
      Result<span style="color: #000000;">&#91;</span>Index<span style="color: #000000;">&#93;</span>:= Char<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">$30</span> + <span style="color: #000000;">&#40;</span>Value <span style="color: #0000FF;">and</span> <span style="color: #DD0000;">1</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
      Dec<span style="color: #000000;">&#40;</span>Index<span style="color: #000000;">&#41;</span>;
      Value:= Value <span style="color: #0000FF;">shr</span> <span style="color: #DD0000;">1</span>;
    <span style="color: #0000FF;">end</span>;
<span style="color: #0000FF;">end</span>;</pre>
	<br /><br />
	Тематический раздел: <a href="http://expert.delphi.int.ru/groups/2/"><strong>Общие вопросы по программированию</strong></a><br />
	Автор ответа: <a href="http://www.delphi.int.ru/user/436/"><strong>min@y™</strong></a><br />
	<a href="http://expert.delphi.int.ru/question/6062/"><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>
