<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Комментарии: Перечисление всех компонентов на форме</title>
	<atom:link href="http://parsers.info/2009/12/perechislenie-vsex-komponentov-na-forme/feed/" rel="self" type="application/rss+xml" />
	<link>http://parsers.info/2009/12/perechislenie-vsex-komponentov-na-forme/</link>
	<description>Delphi блог Димаса: программирование на delphi, парсеры, статьи, размышления</description>
	<lastBuildDate>Sun, 29 Apr 2012 09:22:01 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
	<item>
		<title>Автор: crystalbit</title>
		<link>http://parsers.info/2009/12/perechislenie-vsex-komponentov-na-forme/comment-page-1/#comment-4500</link>
		<dc:creator>crystalbit</dc:creator>
		<pubDate>Fri, 22 Jan 2010 11:41:24 +0000</pubDate>
		<guid isPermaLink="false">http://parsers.info/?p=452#comment-4500</guid>
		<description>Хорошее применение :)</description>
		<content:encoded><![CDATA[<p>Хорошее применение :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Alex</title>
		<link>http://parsers.info/2009/12/perechislenie-vsex-komponentov-na-forme/comment-page-1/#comment-4495</link>
		<dc:creator>Alex</dc:creator>
		<pubDate>Fri, 22 Jan 2010 09:38:44 +0000</pubDate>
		<guid isPermaLink="false">http://parsers.info/?p=452#comment-4495</guid>
		<description>Очень полезная возможность.
Делал примерно таким образом перевод интерфейса.</description>
		<content:encoded><![CDATA[<p>Очень полезная возможность.<br />
Делал примерно таким образом перевод интерфейса.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: crystalbit</title>
		<link>http://parsers.info/2009/12/perechislenie-vsex-komponentov-na-forme/comment-page-1/#comment-4006</link>
		<dc:creator>crystalbit</dc:creator>
		<pubDate>Sat, 02 Jan 2010 15:24:04 +0000</pubDate>
		<guid isPermaLink="false">http://parsers.info/?p=452#comment-4006</guid>
		<description>Как здорово, что все мы здесь сегодня собрались :)
Спасибо, с праздниками!</description>
		<content:encoded><![CDATA[<p>Как здорово, что все мы здесь сегодня собрались :)<br />
Спасибо, с праздниками!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Алексей Тимохин</title>
		<link>http://parsers.info/2009/12/perechislenie-vsex-komponentov-na-forme/comment-page-1/#comment-4005</link>
		<dc:creator>Алексей Тимохин</dc:creator>
		<pubDate>Sat, 02 Jan 2010 14:35:58 +0000</pubDate>
		<guid isPermaLink="false">http://parsers.info/?p=452#comment-4005</guid>
		<description>Параметр ChildsList: TList лучше объявить как const, чтобы случайно не изменить указатель.
Также хорошо бы использовать try .. finally.

&lt;pre&gt;
procedure FillChildComponentsList(const SourceComponent: TComponent;
 const ChildsList: TList);
var
  I: Integer;
begin
  //рекурсивный поиск дочерних компонентов
  for I := 0 to SourceComponent.ComponentCount - 1 do
  begin
    ChildsList.Add(SourceComponent.Components[I]);
    FillChildComponentsList(SourceComponent.Components[I], ChildsList);
  end;
end;

procedure Tf_TestFrameComponents.Button_TestComponentsClick(Sender: TObject);
var
  FoundedComponentsList: TList;
  I: Integer;
  Comp: TComponent;
begin
  //получение списка компонетов
  FoundedComponentsList := TList.Create;
  try 
    FillChildComponentsList(Self, FoundedComponentsList);

    //смена текста у всех лейблов
    for I := 0 to FoundedComponentsList.Count - 1 do
    begin
      Comp := FoundedComponentsList[I];
      if Comp is TLabel then
      begin
        (Comp as TLabel).Caption := &#039;Its work!&#039;;
      end;
    end;
  
  finally
    FreeAndNil(FoundedComponentsList);
  end;
end;
&lt;/pre&gt;</description>
		<content:encoded><![CDATA[<p>Параметр ChildsList: TList лучше объявить как const, чтобы случайно не изменить указатель.<br />
Также хорошо бы использовать try .. finally.</p>
<pre>
procedure FillChildComponentsList(const SourceComponent: TComponent;
 const ChildsList: TList);
var
  I: Integer;
begin
  //рекурсивный поиск дочерних компонентов
  for I := 0 to SourceComponent.ComponentCount - 1 do
  begin
    ChildsList.Add(SourceComponent.Components[I]);
    FillChildComponentsList(SourceComponent.Components[I], ChildsList);
  end;
end;

procedure Tf_TestFrameComponents.Button_TestComponentsClick(Sender: TObject);
var
  FoundedComponentsList: TList;
  I: Integer;
  Comp: TComponent;
begin
  //получение списка компонетов
  FoundedComponentsList := TList.Create;
  try
    FillChildComponentsList(Self, FoundedComponentsList);

    //смена текста у всех лейблов
    for I := 0 to FoundedComponentsList.Count - 1 do
    begin
      Comp := FoundedComponentsList[I];
      if Comp is TLabel then
      begin
        (Comp as TLabel).Caption := 'Its work!';
      end;
    end;

  finally
    FreeAndNil(FoundedComponentsList);
  end;
end;
</pre>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: crystalbit</title>
		<link>http://parsers.info/2009/12/perechislenie-vsex-komponentov-na-forme/comment-page-1/#comment-3933</link>
		<dc:creator>crystalbit</dc:creator>
		<pubDate>Sun, 27 Dec 2009 11:53:00 +0000</pubDate>
		<guid isPermaLink="false">http://parsers.info/?p=452#comment-3933</guid>
		<description>большое спасибо, внёс в пост</description>
		<content:encoded><![CDATA[<p>большое спасибо, внёс в пост</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: JayDi</title>
		<link>http://parsers.info/2009/12/perechislenie-vsex-komponentov-na-forme/comment-page-1/#comment-3927</link>
		<dc:creator>JayDi</dc:creator>
		<pubDate>Sat, 26 Dec 2009 21:04:35 +0000</pubDate>
		<guid isPermaLink="false">http://parsers.info/?p=452#comment-3927</guid>
		<description>Вот рабочий вариант с рекурсией (подходит для фреймов):
&lt;pre&gt;
procedure FillChildComponentsList(const SourceComponent: TComponent;
  var ChildsList: TList);
var
  I: Integer;
begin
  //рекурсивный поиск дочерних компонентов
  for I := 0 to SourceComponent.ComponentCount - 1 do
  begin
    ChildsList.Add(SourceComponent.Components[I]);
    FillChildComponentsList(SourceComponent.Components[I], ChildsList);
  end;
end;

procedure Tf_TestFrameComponents.Button_TestComponentsClick(Sender: TObject);
var
  FoundedComponentsList: TList;
  I: Integer;
  Comp: TComponent;
begin
  //получение списка компонетов
  FoundedComponentsList := TList.Create;
  FillChildComponentsList(Self, FoundedComponentsList);

  //смена текста у всех лейблов
  for I := 0 to FoundedComponentsList.Count - 1 do
  begin
    Comp := FoundedComponentsList[I];
    if Comp is TLabel then
    begin
      (Comp as TLabel).Caption := &#039;Its work!&#039;;
    end;
  end;

  FreeAndNil(FoundedComponentsList);
end;
&lt;/pre&gt;</description>
		<content:encoded><![CDATA[<p>Вот рабочий вариант с рекурсией (подходит для фреймов):</p>
<pre>
procedure FillChildComponentsList(const SourceComponent: TComponent;
  var ChildsList: TList);
var
  I: Integer;
begin
  //рекурсивный поиск дочерних компонентов
  for I := 0 to SourceComponent.ComponentCount - 1 do
  begin
    ChildsList.Add(SourceComponent.Components[I]);
    FillChildComponentsList(SourceComponent.Components[I], ChildsList);
  end;
end;

procedure Tf_TestFrameComponents.Button_TestComponentsClick(Sender: TObject);
var
  FoundedComponentsList: TList;
  I: Integer;
  Comp: TComponent;
begin
  //получение списка компонетов
  FoundedComponentsList := TList.Create;
  FillChildComponentsList(Self, FoundedComponentsList);

  //смена текста у всех лейблов
  for I := 0 to FoundedComponentsList.Count - 1 do
  begin
    Comp := FoundedComponentsList[I];
    if Comp is TLabel then
    begin
      (Comp as TLabel).Caption := 'Its work!';
    end;
  end;

  FreeAndNil(FoundedComponentsList);
end;
</pre>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: crystalbit</title>
		<link>http://parsers.info/2009/12/perechislenie-vsex-komponentov-na-forme/comment-page-1/#comment-3915</link>
		<dc:creator>crystalbit</dc:creator>
		<pubDate>Sat, 26 Dec 2009 15:13:59 +0000</pubDate>
		<guid isPermaLink="false">http://parsers.info/?p=452#comment-3915</guid>
		<description>всё понял
думал, что при создании, например, TLabel на TPanel в процессе дизайна, она также не будет в массиве Components, и что рекурсия - единственный выход
Теперь проверил и убедился, сейчас внесу изменения</description>
		<content:encoded><![CDATA[<p>всё понял<br />
думал, что при создании, например, TLabel на TPanel в процессе дизайна, она также не будет в массиве Components, и что рекурсия &#8211; единственный выход<br />
Теперь проверил и убедился, сейчас внесу изменения</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Алексей Тимохин</title>
		<link>http://parsers.info/2009/12/perechislenie-vsex-komponentov-na-forme/comment-page-1/#comment-3914</link>
		<dc:creator>Алексей Тимохин</dc:creator>
		<pubDate>Sat, 26 Dec 2009 14:45:20 +0000</pubDate>
		<guid isPermaLink="false">http://parsers.info/?p=452#comment-3914</guid>
		<description>Panel1 - на форме, а tmpEdit на панели. Поэтому перебирая компоненты формы, мы не получим доступ к tmpEdit. Но реально - такая ситуация очень редка и скорее является извращённой.
Чаще же всего в реале с ней можно столкнуться только при использовании фреймов. 

Не знаю, что там может быть на целый пост, Имхо, достаточно в этом посте указать, что для фреймов, этот механизм может не сработать.</description>
		<content:encoded><![CDATA[<p>Panel1 &#8211; на форме, а tmpEdit на панели. Поэтому перебирая компоненты формы, мы не получим доступ к tmpEdit. Но реально &#8211; такая ситуация очень редка и скорее является извращённой.<br />
Чаще же всего в реале с ней можно столкнуться только при использовании фреймов. </p>
<p>Не знаю, что там может быть на целый пост, Имхо, достаточно в этом посте указать, что для фреймов, этот механизм может не сработать.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: crystalbit</title>
		<link>http://parsers.info/2009/12/perechislenie-vsex-komponentov-na-forme/comment-page-1/#comment-3912</link>
		<dc:creator>crystalbit</dc:creator>
		<pubDate>Sat, 26 Dec 2009 14:00:32 +0000</pubDate>
		<guid isPermaLink="false">http://parsers.info/?p=452#comment-3912</guid>
		<description>это да, Panel1 же на форме
Получается, рекурсией - наиболее полноценный алгоритм? С твоего позволения напишу пост об этом)</description>
		<content:encoded><![CDATA[<p>это да, Panel1 же на форме<br />
Получается, рекурсией &#8211; наиболее полноценный алгоритм? С твоего позволения напишу пост об этом)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Алексей Тимохин</title>
		<link>http://parsers.info/2009/12/perechislenie-vsex-komponentov-na-forme/comment-page-1/#comment-3909</link>
		<dc:creator>Алексей Тимохин</dc:creator>
		<pubDate>Sat, 26 Dec 2009 13:24:44 +0000</pubDate>
		<guid isPermaLink="false">http://parsers.info/?p=452#comment-3909</guid>
		<description>&gt; А если компонент создавался динамически, и owner не форма (и не на форме), то как быть? И как такое может быть, если это визуальный компонент?

Если компонент создаётся например так:
var
  tmpEdit: TEdit;
begin
  tmpEdit:=TEdit.Create(Panel1); // это не корректно, но возможно
  tmpEdit.Parent := Panel1;
end;</description>
		<content:encoded><![CDATA[<p>&gt; А если компонент создавался динамически, и owner не форма (и не на форме), то как быть? И как такое может быть, если это визуальный компонент?</p>
<p>Если компонент создаётся например так:<br />
var<br />
  tmpEdit: TEdit;<br />
begin<br />
  tmpEdit:=TEdit.Create(Panel1); // это не корректно, но возможно<br />
  tmpEdit.Parent := Panel1;<br />
end;</p>
]]></content:encoded>
	</item>
</channel>
</rss>

