<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3390700</guid>
        <pubDate>Tue, 24 Dec 2013 06:47:36 +0000</pubDate>
        <title>In-place создание массива из констант/переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3390700</link>
        <description><![CDATA[Filka: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=384319&view=findpost&p=3390696'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fr0sT &#064; <time class="tag-quote__quoted-time" datetime="2013-12-24T10:43:36+04:00">24.12.13, 06:43</time></span><div class='quote '>Вариант без generics тоже, возможно, сработает - мне не на чем проверить.</div></div><br>
Например, в D7 не сработает, т.к. там нет конструкторов у дин. массивов.]]></description>
        <author>Filka</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3390698</guid>
        <pubDate>Tue, 24 Dec 2013 06:44:13 +0000</pubDate>
        <title>In-place создание массива из констант/переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3390698</link>
        <description><![CDATA[leo: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=384319&view=findpost&p=3390177'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fr0sT &#064; <time class="tag-quote__quoted-time" datetime="2013-12-23T07:24:56+00:00">23.12.13, 07:24</time></span><div class='quote '> К тому же что, если понадобится менять не только enabled, а, например, еще и visible?</div></div><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=384319&view=findpost&p=3390684'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fr0sT &#064; <time class="tag-quote__quoted-time" datetime="2013-12-24T06:30:19+00:00">24.12.13, 06:30</time></span><div class='quote '>В процедуре и менять...<br>
Зато Open array parameters есть в любой версии Delphi...</div></div><br>
Ну можно еще использовать универсальную функцию просто для создания и инициализации массива контролов в рамках подхода <strong class='tag-b'>Fr0sT</strong><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TCtlArray = array of TControl;</div><div class="code_line">function GetCtlArray(Controls:array of TControl):TCtlArray;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;SetLength(Result,High(Controls)+1);</div><div class="code_line">&nbsp;&nbsp;Move(Controls[0],Result[0],SizeOf(TControl)*(High(Controls)+1));</div><div class="code_line">end;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>leo</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3390696</guid>
        <pubDate>Tue, 24 Dec 2013 06:43:36 +0000</pubDate>
        <title>In-place создание массива из констант/переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3390696</link>
        <description><![CDATA[Fr0sT: Вариант без generics тоже, возможно, сработает - мне не на чем проверить.]]></description>
        <author>Fr0sT</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3390691</guid>
        <pubDate>Tue, 24 Dec 2013 06:38:38 +0000</pubDate>
        <title>In-place создание массива из констант/переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3390691</link>
        <description><![CDATA[Filka: Я тоже не спорю. Я просто хотел сказать, что подобное можно сделать и в старых версиях Delphi.]]></description>
        <author>Filka</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3390684</guid>
        <pubDate>Tue, 24 Dec 2013 06:30:19 +0000</pubDate>
        <title>In-place создание массива из констант/переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3390684</link>
        <description><![CDATA[Fr0sT: <strong class='tag-b'>Filka</strong>, я ж и не спорю, что решить задачу можно несколькими способами. Просто делюсь более неочевидным.]]></description>
        <author>Fr0sT</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3390186</guid>
        <pubDate>Mon, 23 Dec 2013 07:32:19 +0000</pubDate>
        <title>In-place создание массива из констант/переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3390186</link>
        <description><![CDATA[Filka: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=384319&view=findpost&p=3390177'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fr0sT &#064; <time class="tag-quote__quoted-time" datetime="2013-12-23T07:24:56+00:00">23.12.13, 07:24</time></span><div class='quote '>отдельная процедура занимает больше места, чем объявление типа</div></div>И что?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=384319&view=findpost&p=3390177'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fr0sT &#064; <time class="tag-quote__quoted-time" datetime="2013-12-23T07:24:56+00:00">23.12.13, 07:24</time></span><div class='quote '>если понадобится менять не только enabled, а, например, еще и visible?</div></div>В процедуре и менять...<br>
<br>
Зато <strong class='tag-b'>Open array parameters</strong> есть в любой версии Delphi...]]></description>
        <author>Filka</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3390177</guid>
        <pubDate>Mon, 23 Dec 2013 07:24:56 +0000</pubDate>
        <title>In-place создание массива из констант/переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3390177</link>
        <description><![CDATA[Fr0sT: <strong class='tag-b'>Filka</strong>, отдельная процедура занимает больше места, чем объявление типа). К тому же что, если понадобится менять не только enabled, а, например, еще и visible?]]></description>
        <author>Fr0sT</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3390153</guid>
        <pubDate>Mon, 23 Dec 2013 06:36:20 +0000</pubDate>
        <title>In-place создание массива из констант/переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3390153</link>
        <description><![CDATA[Filka: Например, так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">procedure SetEnabledBtn(const BtnArr: array of TButton; Value: Boolean);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;I: Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;for I := Low(BtnArr) to High(BtnArr) do</div><div class="code_line">&nbsp;&nbsp; &nbsp;BtnArr[I].Enabled := Value;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Button1Click(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;SetEnabledBtn([Button2, Button3, Button4], False);</div><div class="code_line">end;</div></ol></div></div></div></div>]]></description>
        <author>Filka</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3390145</guid>
        <pubDate>Mon, 23 Dec 2013 06:28:22 +0000</pubDate>
        <title>In-place создание массива из констант/переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3390145</link>
        <description><![CDATA[Fr0sT: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=384319&view=findpost&p=3390106'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Filka &#064; <time class="tag-quote__quoted-time" datetime="2013-12-23T05:22:59+00:00">23.12.13, 05:22</time></span><div class='quote '>Можно же использовать Open array parameters...</div></div><br>
Как оно применимо к данной ситуации?]]></description>
        <author>Fr0sT</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3390106</guid>
        <pubDate>Mon, 23 Dec 2013 05:22:59 +0000</pubDate>
        <title>In-place создание массива из констант/переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3390106</link>
        <description><![CDATA[Filka: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=384319&view=findpost&p=3380812'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fr0sT &#064; <time class="tag-quote__quoted-time" datetime="2013-11-27T12:05:00+00:00">27.11.13, 12:05</time></span><div class='quote '>Работает и без generics, но <strong class='tag-b'>тип дин. массива обязательно должен быть предварительно объявлен</strong></div></div><br>
Можно же использовать <strong class='tag-b'>Open array parameters</strong>...]]></description>
        <author>Filka</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3380998</guid>
        <pubDate>Thu, 28 Nov 2013 06:10:34 +0000</pubDate>
        <title>In-place создание массива из констант/переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3380998</link>
        <description><![CDATA[Fr0sT: <strong class='tag-b'>SPM</strong>, куча однотипных действий выполняется не копипастой, а циклом, как и положено однотипным действиям. Оптимизация скорее на уровне исходника, чем машинного кода. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2013-11-28T06:14:10+00:00">28.11.13, 06:14</time></span></span><br>
Хорошо пригодится в случае, когда, например, надо управлять доступностью групп контролов на основе уровня юзера.]]></description>
        <author>Fr0sT</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3380923</guid>
        <pubDate>Wed, 27 Nov 2013 18:11:55 +0000</pubDate>
        <title>In-place создание массива из констант/переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3380923</link>
        <description><![CDATA[SPM: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Лично мой взор неуемного оптимизатора </div></div> стесняюсь спросить, а что тут оптимизировано?]]></description>
        <author>SPM</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3380812</guid>
        <pubDate>Wed, 27 Nov 2013 12:05:00 +0000</pubDate>
        <title>In-place создание массива из констант/переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=384319&amp;view=findpost&amp;p=3380812</link>
        <description><![CDATA[Fr0sT: <strong class='tag-b'><span class="tag-color tag-color-named" data-value="purple" style="color: purple"><span class='tag-size' data-value='14' style='font-size:14pt;'>In-place создание массива из констант</span></span></strong><br>
<br>
Этот метод мне подсказал, кажется, leo, за что ему респект.<br>
<br>
<strong class='tag-b'>Задача</strong>:<br>
Иногда бывает нужно сделать перебор ряда однотипных переменных. Самый распространенный пример - массовое управление группами контролов<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Button1.Enabled := False;</div><div class="code_line">Button3.Enabled := False;</div><div class="code_line">Button5.Enabled := False;</div></ol></div></div></div></div><br>
<br>
Лично мой взор неуемного оптимизатора сия конструкция оскорбляет, но на первый взгляд от нее никуда не деться - разве что чере временный массив, но и его придется заполнять по одному. Конструкция [item1, item2, ...] работает только в параметрах подпрограмм - ну а создавать отдельную процедуру для одного действия тоже не хочется.<br>
К счастью, есть и другой, хитрый способ получить переменную дин. массива, а именно:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&#60;dyn_array_type&#62;.Create(item1, item2, ...)</div></ol></div></div></div></div><br>
<br>
Для нашего случая:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;btn: TButton;</div><div class="code_line">...</div><div class="code_line">&nbsp;&nbsp;for btn in TArray&#60;TButton&#62;.Create(Button2, Button6, Button7) do</div><div class="code_line">&nbsp;&nbsp; &nbsp;btn.Enabled := False;</div></ol></div></div></div></div><br>
либо получаем для неоднократного последующего применения<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;i: Integer;</div><div class="code_line">&nbsp;&nbsp;BtnGroup1: TArray&#60;TButton&#62;;</div><div class="code_line">...</div><div class="code_line">&nbsp;&nbsp;BtnGroup1 := TArray&#60;TButton&#62;.Create(Button2, Button6, Button7);</div><div class="code_line">&nbsp;&nbsp;...</div><div class="code_line">&nbsp;&nbsp;for i := Low(BtnGroup1) to High(BtnGroup1) do</div><div class="code_line">&nbsp;&nbsp; BtnGroup1[i].Enabled := False;</div></ol></div></div></div></div><br>
А можно и для разношерстных контролов<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;comp: TControl;</div><div class="code_line">...</div><div class="code_line">&nbsp;&nbsp;for comp in TArray&#60;TControl&#62;.Create(Button2, Button6, CheckBox3) do</div><div class="code_line">&nbsp;&nbsp; &nbsp;comp.Enabled := False;</div></ol></div></div></div></div><br>
<br>
Работает и без generics, но тип дин. массива обязательно должен быть предварительно объявлен:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TArrayButton = array of TButton;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;btn: TButton;</div><div class="code_line">...</div><div class="code_line">&nbsp;&nbsp;for btn in TArrayButton.Create(Button1, Button2) do</div><div class="code_line">&nbsp;&nbsp; &nbsp;btn.Enabled := False;</div></ol></div></div></div></div>]]></description>
        <author>Fr0sT</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      </channel>
      </rss>
	