Форум программистов CODEBY.NET Хостинг в Беларуси — Active Technologies

Разработка бизнес сайтов

Нужны клиенты? Тогда сюда быстрее...
X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )


> Обращение к компонентам в цикле., Если есть много компонентов одного типа.
DizeL
Вставить ник
сообщение 12:10:2004, 19:46
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 32
Регистрация: 31:07:2004
Пользователь №: 732



Репутация:   0  


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

С уважением, DizeL.
Подняться вверх 
 
Сообщение #1
 
Новая тема 
Ответов (1 - 8)
zubr
Вставить ник
сообщение 13:10:2004, 04:00
Цитата Ответить 


Божественный
Иконка группы

Группа: Модеры
Сообщений: 937
Регистрация: 19:11:2003
Пользователь №: 133



Репутация:   16  


Dizel

Как вариант, может не самый лучший:
For i:=0 to Form1.ComponentCount-1 do
If Form1.Components[i] is TButtonSpeed then
(Form1.Components[i] as TButtonSpeed).Flat:=False;
Подняться вверх 
 
Сообщение #2
Barmutik
Вставить ник
сообщение 14:10:2004, 13:25
Цитата Ответить 


Божественный
Иконка группы

Группа: Модеры
Сообщений: 2 451
Регистрация: 27:05:2004
Из: Минск
Пользователь №: 561



Репутация:   8  


Правильный вариант .. единственное что если они лежат на разных парентах то придётся закручивать рекурсию...
Подняться вверх 
 
Сообщение #3
DizeL
Вставить ник
сообщение 19:10:2004, 19:00
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 32
Регистрация: 31:07:2004
Пользователь №: 732



Репутация:   0  


Цитата(QUOTE @ Barmutik)
Правильный вариант .. единственное что если они лежат на разных парентах то придётся закручивать рекурсию...

А мне посоветовали что-то вроде "FindComponent(Listview+inttostr(i)) as Tlistview ....." Короче, дальше не помню точно, но что-то связанное с этой процедурой. Не могли бы мне кто-нибудь подсказать точную формулировку этого оператора, а то он у меня ошибки при компеляции вызывает. Жду ответов...
Подняться вверх 
 
Сообщение #4
zubr
Вставить ник
сообщение 20:10:2004, 03:51
Цитата Ответить 


Божественный
Иконка группы

Группа: Модеры
Сообщений: 937
Регистрация: 19:11:2003
Пользователь №: 133



Репутация:   16  


Dizel

Цитата
А мне посоветовали что-то вроде "FindComponent(Listview+inttostr(i)) as Tlistview ....." Короче, дальше не помню точно, но что-то связанное с этой процедурой. Не могли бы мне кто-нибудь подсказать точную формулировку этого оператора, а то он у меня ошибки при компеляции вызывает.

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

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

или так:
For i:=1 to 24 do
TSpeedButton(Form1.FindComponent('SpeedButton'+IntToStr(i))).Flat:=False;
Подняться вверх 
 
Сообщение #5
Barmutik
Вставить ник
сообщение 20:10:2004, 05:37
Цитата Ответить 


Божественный
Иконка группы

Группа: Модеры
Сообщений: 2 451
Регистрация: 27:05:2004
Из: Минск
Пользователь №: 561



Репутация:   8  


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

По умолчанию оно так и будет, но если ты создавал их в рантайме то может быть и по другому...
Подняться вверх 
 
Сообщение #6
DizeL
Вставить ник
сообщение 20:10:2004, 08:23
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 32
Регистрация: 31:07:2004
Пользователь №: 732



Репутация:   0  


Цитата(Barmutik @ 20:10:2004, 08:37 )
Единственное что надо добавить, это то что надо быть уверенным что Owner-ом у твоих кнопок является форма...

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

Вообщето мне это дело надо применить к LISTVIEW, но они у меня не на форме, а на PageControl'ах. Это влияет или нет? huh.gif

Жду ответов, заранее спасибо...
Подняться вверх 
 
Сообщение #7
Barmutik
Вставить ник
сообщение 20:10:2004, 08:33
Цитата Ответить 


Божественный
Иконка группы

Группа: Модеры
Сообщений: 2 451
Регистрация: 27:05:2004
Из: Минск
Пользователь №: 561



Репутация:   8  


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

Из Хелпа:
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.


Т.е. если Вы их не создавали руками то всё гарантированно будет ОК.
Подняться вверх 
 
Сообщение #8
DizeL
Вставить ник
сообщение 20:10:2004, 21:15
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 32
Регистрация: 31:07:2004
Пользователь №: 732



Репутация:   0  


Цитата(zubr @ 20:10:2004, 06:51 )
Dizel


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

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

или так:
For i:=1 to 24 do
TSpeedButton(Form1.FindComponent('SpeedButton'+IntToStr(i))).Flat:=False;

smile.gif Спасибо, действительно работает. Я просто скобки после "AS ТИП" не поставил. А кавычки - это я так пропустил, просто спешил, когда составлял пост. wink.gif
Подняться вверх 
 
Сообщение #9


Быстрый ответ  Ответить  Новая тема 

> Быстрый ответ
Полужирный
Курсив
Подчеркнутый
Вставить изображение
Смайлики
Цитата
Код
 
 Отправлять уведомления об ответах на e-mail |  Включить смайлики |  Добавить подпись |  AJAX?
   

 

RSS Текстовая версия Сейчас: 8:01:2009 - 23:49

с нами можно связаться по:
телефону: +375-(29)-632-60-67
e-mail:info@codeby.net