<?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=411235&amp;view=findpost&amp;p=3741734</guid>
        <pubDate>Mon, 25 Sep 2017 07:20:11 +0000</pubDate>
        <title>Форма на основе контрола-контейнера</title>
        <link>https://forum.sources.ru/index.php?showtopic=411235&amp;view=findpost&amp;p=3741734</link>
        <description><![CDATA[Fr0sT: Проще - по форме на каждый диалог.]]></description>
        <author>Fr0sT</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=411235&amp;view=findpost&amp;p=3741529</guid>
        <pubDate>Sat, 23 Sep 2017 17:59:02 +0000</pubDate>
        <title>Форма на основе контрола-контейнера</title>
        <link>https://forum.sources.ru/index.php?showtopic=411235&amp;view=findpost&amp;p=3741529</link>
        <description><![CDATA[jangogo: А нет решений попроще?]]></description>
        <author>jangogo</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=411235&amp;view=findpost&amp;p=3737939</guid>
        <pubDate>Fri, 25 Aug 2017 07:53:03 +0000</pubDate>
        <title>Форма на основе контрола-контейнера</title>
        <link>https://forum.sources.ru/index.php?showtopic=411235&amp;view=findpost&amp;p=3737939</link>
        <description><![CDATA[Fr0sT: <strong class='tag-b'>leo</strong>, сценарий использования такой - есть форма с интерфейсом, возможно даже главная, и некоторые действия юзера запускают диалоги. Естественно, для этого нужны отдельные окна (вариант с попап-рамкой а-ля диалоги на веб-страницах тоже подходит, но это муторно).]]></description>
        <author>Fr0sT</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=411235&amp;view=findpost&amp;p=3737932</guid>
        <pubDate>Fri, 25 Aug 2017 06:47:39 +0000</pubDate>
        <title>Форма на основе контрола-контейнера</title>
        <link>https://forum.sources.ru/index.php?showtopic=411235&amp;view=findpost&amp;p=3737932</link>
        <description><![CDATA[leo: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=411235&view=findpost&p=3737875'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fr0sT &#064; <time class="tag-quote__quoted-time" datetime="2017-08-24T12:49:15+00:00">24.08.17, 12:49</time></span><div class='quote '>Для большого количества диалогов можно сделать так:<br>
1 - завести отдельную форму<br>
2 - на нее PageControl, для удобства переключения между диалогами в дизайн-тайм<br>
...</div></div><br>
А какой тогда смысл создавать новую форму и копировать на нее контролы, если можно использовать существующую, просто установив активную страницу PageControl-а и скрыв ярлычки остальных страниц? Не устраивает рамка (и визульный стиль)? Можно древний TNotebook времен Win 3.1 использовать ;)]]></description>
        <author>leo</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=411235&amp;view=findpost&amp;p=3737875</guid>
        <pubDate>Thu, 24 Aug 2017 12:49:15 +0000</pubDate>
        <title>Форма на основе контрола-контейнера</title>
        <link>https://forum.sources.ru/index.php?showtopic=411235&amp;view=findpost&amp;p=3737875</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;'>Форма на основе контрола-контейнера</span></span></strong><br>
<br>
Очень часто бывает, что возможностей стандартных диалогов не хватает, но и отдельный файл формы заводить под пару нестандартных контролов неохота. Формировать динамически - большая морока. Можно юзать Winapi диалоги, но с ними свои нюансы, да и удобство обработки событий несравнимо с VCL. Мне пришла в голову идея, как просто накидывать интерфейс диалогов без необходимости заводить файл формы - достаточно кинуть на главную форму контрол-контейнер (panel, pagecontrol, groupbox), сделать его невидимым и создать интерфейс на нём. После чего с помощью нижеприведенной функции сгенерировать форму с контролами, скопированными с этого контейнера.<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">function FormFromControl(Container: TWinControl): TForm;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;CtrlClass: TControlClass;</div><div class="code_line">&nbsp;&nbsp;Ctrl: TControl;</div><div class="code_line">&nbsp;&nbsp;ms: TMemoryStream;</div><div class="code_line">&nbsp;&nbsp;i: Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Result := TForm.Create(nil);</div><div class="code_line">&nbsp;&nbsp;Result.ClientHeight := Container.Height;</div><div class="code_line">&nbsp;&nbsp;Result.ClientWidth := Container.Width;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;ms := TMemoryStream.Create;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;for i := 0 to Container.ControlCount - 1 do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;CtrlClass := TControlClass(Container.Controls[i].ClassType);</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Enable component to be read</div><div class="code_line">&nbsp;&nbsp; &nbsp;RegisterClass(CtrlClass);</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Clone component via stream</div><div class="code_line">&nbsp;&nbsp; &nbsp;ms.WriteComponent(Container.Controls[i]);</div><div class="code_line">&nbsp;&nbsp; &nbsp;ms.Position := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Ctrl := CtrlClass.Create(Result); // To assign Parent before restoring from stream</div><div class="code_line">&nbsp;&nbsp; &nbsp;Ctrl.Parent := Result;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ms.ReadComponent(Ctrl);</div><div class="code_line">&nbsp;&nbsp; &nbsp;ms.Position := 0;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;FreeAndNil(ms);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">// Пример</div><div class="code_line">procedure TForm1.btnClick(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;with FormFromControl(PageControl1.Pages[0]) do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;BorderStyle := bsDialog;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Caption := &#39;Dialog from PageControl&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position := poScreenCenter;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// assign handlers...</div><div class="code_line">&nbsp;&nbsp; &nbsp;ShowModal;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Free;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Для большого количества диалогов можно сделать так:<br>
1 - завести отдельную форму<br>
2 - на нее PageControl, для удобства переключения между диалогами в дизайн-тайм<br>
3 - на каждый TabSheet PageControl-а - Panel или GroupBox, для задания габаритов диалога<br>
4 - указывать эти Panel или GroupBox в качестве параметров FormFromControl]]></description>
        <author>Fr0sT</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      </channel>
      </rss>
	