Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Button.Caption и цикл [D7, XP]


Страницы:   1 2

Шел мимо решил зайти ©   (2011-12-21 16:12:00) 

Доброго времени суток.
Есть такая задача:
Существует некое количество одинаковых кнопок Button1, Button2,Button3 и т.д. необходимо в цикле задать им всем в Caption определенный текст, можно конечно описать каждую кнопку и явно присвоить значение, но можно ли сделать это с помощью цикла.


Шел мимо решил зайти   (2011-12-21 16:42:00) [21]

Ega23 ©   (21.12.11 16:38) [4]
спасибо вам за развернутый ответ, пойду крутить код.


Dimka Maslov   (2011-12-21 16:42:00) [22]


> Ega23 ©   (21.12.11 16:38) [4]

А ещё кнопка может быть впудзырена ср-вами вынь-апи. Тогда спасти может только EnumChildWindows


Ega23   (2011-12-21 16:39:00) [23]


> Это не спасёт, если кнопка была создана динамически без
> указания владельца.


Поправка: владелец кнопки не тот контейнер, по которому мы "бежим".
Либо nil, либо ещё что-нибудь, Panel1, например.


Ega23   (2011-12-21 16:38:00) [24]

1. Перебираем все компонентыу владельца (например TForm)
for i := 0 to ComponentCount - 1 do
 if (Components[i] is TButton) then
  TButton(Components[i]).Caption := 'bla-bla-bla';

Это не спасёт, если кнопка была создана динамически без указания владельца.

2. Перебираем все контролыу контейнера, на котором они лежат (например Panel1)
for i := 0 to Panel1.ControlCount - 1 do
 if (Panel1.Controls[i] is TButton) then
   TButton(Controls[i]).Caption := '1111';

Это переименует все кнопки, которые в данный момент лежат на Panel1, независимо от того, созданы они в динамике или нет.
Но если на Panel1 лежит Panel2, на которой лежат кнопки, то они не будут переименованы.
В этом случае нужен рекурсивный обход.

3. Если нужно некоторыекнопки переименовать (либо некоторые кнопки не переименовывать), то им можно задать TButton.Tag
for i := 0 to ComponentCount - 1 do
 if (Components[i] is TButton) and (TButton(Components[i]).Tag = 1) then
  TButton(Components[i]).Caption := 'bla-bla-bla';


Как-то так.


Шел мимо решил зайти   (2011-12-21 16:29:00) [25]

А можно ли мне мааааалюсенький примерчик работы цикла с методом FindControl


Dimka Maslov   (2011-12-21 16:19:00) [26]

Ни УК, ни КОАП не рассматривают данное деяние как правонарушение. Следовательно — можно. Метод FindControl вам в помощь.


Anatoly Podgoretsky   (2011-12-21 16:19:00) [27]

> Шел мимо решил зайти  (21.12.2011 16:12:00)  [0]

Можно


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо