Обращение к компонентам в цикле.

Тема в разделе "Delphi - FAQ", создана пользователем DizeL, 12 окт 2004.

Статус темы:
Закрыта.
  1. DizeL

    DizeL Гость

    Репутация:
    0
    Как обратиться к одинаковым компонентам в цикле. Например, у меня есть на форме 24 ButtonSpeed'ов. И мне надо ко всем применить Flat:=false. Как это сделать, чтоб не писать 20 раз ону и туже строку. Кто сталкивался, прошу помочь...

    С уважением, DizeL.
     
  2. zubr

    zubr Гость

    Репутация:
    0
    Dizel

    Как вариант, может не самый лучший:
    Код (Text):
    For i:=0 to Form1.ComponentCount-1 do
    If Form1.Components[i] is TButtonSpeed then
    (Form1.Components[i] as TButtonSpeed).Flat:=False;
     
  3. Barmutik

    Barmutik Гость

    Репутация:
    0
    Правильный вариант .. единственное что если они лежат на разных парентах то придётся закручивать рекурсию...
     
  4. DizeL

    DizeL Гость

    Репутация:
    0
    <!--QuoteBegin-QUOTE+Barmutik-->
    <span class="vbquote">(QUOTE @ Barmutik)</span><!--QuoteEBegin-->Правильный вариант .. единственное что если они лежат на разных парентах то придётся закручивать рекурсию...[/quote]
    А мне посоветовали что-то вроде "FindComponent(Listview+inttostr(i)) as Tlistview ....." Короче, дальше не помню точно, но что-то связанное с этой процедурой. Не могли бы мне кто-нибудь подсказать точную формулировку этого оператора, а то он у меня ошибки при компеляции вызывает. Жду ответов...
     
  5. zubr

    zubr Гость

    Репутация:
    0
    Dizel

    Ошибки при компиляции, потому что в функции FindComponent используется строковый параметр - он должен быть в кавычках: FindComponent('Listview'+IntToStr(i)) as TListview

    Можно и через FindComponent, если имена компонент ты не менял, а оставлял по умолчанию. В твоем случае можно сделать так:
    Код (Text):
    For i:=1 to 24 do
    (Form1.FindComponent('SpeedButton'+IntToStr(i)) as TSpeedButton).Flat:=False;
    или так:
    Код (Text):
    For i:=1 to 24 do
    TSpeedButton(Form1.FindComponent('SpeedButton'+IntToStr(i))).Flat:=False;
     
  6. Barmutik

    Barmutik Гость

    Репутация:
    0
    Единственное что надо добавить, это то что надо быть уверенным что Owner-ом у твоих кнопок является форма...

    По умолчанию оно так и будет, но если ты создавал их в рантайме то может быть и по другому...
     
  7. DizeL

    DizeL Гость

    Репутация:
    0
    <!--QuoteBegin-Barmutik+20:10:2004, 08:37 -->
    <span class="vbquote">(Barmutik @ 20:10:2004, 08:37 )</span><!--QuoteEBegin-->Единственное что надо добавить, это то что надо быть уверенным что Owner-ом у твоих кнопок является форма...

    По умолчанию оно так и будет, но если ты создавал их в рантайме то может быть и по другому...[/quote]
    Вообщето мне это дело надо применить к LISTVIEW, но они у меня не на форме, а на PageControl'ах. Это влияет или нет? :huh:

    Жду ответов, заранее спасибо...
     
  8. Barmutik

    Barmutik Гость

    Репутация:
    0
    Это влияет на свойство Parent.. а свойство Owner у создаваемых по умолчанию компонент равно Вашей Форме

    Из Хелпа:
    Код (Text):
    By default, a form owns all components that are on it. In turn, the form is owned by the application. Thus when the application shuts down and its memory is freed, the memory for all forms (and all their owned components) is also freed.
    Т.е. если Вы их не создавали руками то всё гарантированно будет ОК.
     
  9. DizeL

    DizeL Гость

    Репутация:
    0
    <!--QuoteBegin-zubr+20:10:2004, 06:51 -->
    <span class="vbquote">(zubr @ 20:10:2004, 06:51 )</span><!--QuoteEBegin-->Dizel


    Ошибки при компиляции, потому что в функции FindComponent используется строковый параметр - он должен быть в кавычках: FindComponent('Listview'+IntToStr(i)) as TListview

    Можно и через FindComponent, если имена компонент ты не менял, а оставлял по умолчанию. В твоем случае можно сделать так:
    Код (Text):
    For i:=1 to 24 do
    (Form1.FindComponent('SpeedButton'+IntToStr(i)) as TSpeedButton).Flat:=False;
    или так:
    Код (Text):
    For i:=1 to 24 do
    TSpeedButton(Form1.FindComponent('SpeedButton'+IntToStr(i))).Flat:=False;
    [/quote]
    :huh: Спасибо, действительно работает. Я просто скобки после "AS ТИП" не поставил. А кавычки - это я так пропустил, просто спешил, когда составлял пост. :)
     
Загрузка...
Похожие Темы - Обращение компонентам цикле
  1. Bafomet
    Ответов:
    20
    Просмотров:
    1.021
  2. Shouldercannon
    Ответов:
    1
    Просмотров:
    517
  3. proteam
    Ответов:
    7
    Просмотров:
    932
  4. Вовкин
    Ответов:
    0
    Просмотров:
    795
  5. Вовкин
    Ответов:
    0
    Просмотров:
    749
Статус темы:
Закрыта.

Поделиться этой страницей