Форум: "Начинающим";
Текущий архив: 2012.04.15;
Скачать: [xml.tar.bz2];
ВнизButton.Caption и цикл Найти похожие ветки
← →
Шел мимо решил зайти (2011-12-21 16:12) [0]Доброго времени суток.
Есть такая задача:
Существует некое количество одинаковых кнопок Button1, Button2,Button3 и т.д. необходимо в цикле задать им всем в Caption определенный текст, можно конечно описать каждую кнопку и явно присвоить значение, но можно ли сделать это с помощью цикла.
← →
Dimka Maslov © (2011-12-21 16:19) [1]Ни УК, ни КОАП не рассматривают данное деяние как правонарушение. Следовательно — можно. Метод FindControl вам в помощь.
← →
Anatoly Podgoretsky © (2011-12-21 16:19) [2]> Шел мимо решил зайти (21.12.2011 16:12:00) [0]
Можно
← →
Шел мимо решил зайти (2011-12-21 16:29) [3]А можно ли мне мааааалюсенький примерчик работы цикла с методом FindControl
← →
Ega23 © (2011-12-21 16:38) [4]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.Tagfor 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";
Как-то так.
← →
Ega23 © (2011-12-21 16:39) [5]
> Это не спасёт, если кнопка была создана динамически без
> указания владельца.
Поправка: владелец кнопки не тот контейнер, по которому мы "бежим".
Либо nil, либо ещё что-нибудь, Panel1, например.
← →
Dimka Maslov © (2011-12-21 16:42) [6]
> Ega23 © (21.12.11 16:38) [4]
А ещё кнопка может быть впудзырена ср-вами вынь-апи. Тогда спасти может только EnumChildWindows
← →
Шел мимо решил зайти (2011-12-21 16:42) [7]Ega23 © (21.12.11 16:38) [4]
спасибо вам за развернутый ответ, пойду крутить код.
← →
Ega23 © (2011-12-21 16:43) [8]
> А ещё кнопка может быть впудзырена ср-вами вынь-апи. Тогда
> спасти может только EnumChildWindows
Это уже не TButton будет. :)
← →
Dimka Maslov © (2011-12-21 16:47) [9]
> Ega23 © (21.12.11 16:43) [8]
Можно заметить, что в вопросе на TButton нет ни намёка
← →
Ega23 © (2011-12-21 17:13) [10]
> Можно заметить, что в вопросе на TButton нет ни намёка
Можно заметить, что в вопросе есть намёк на некий контрол "Кнопка" со свойством "Caption".
← →
Dennis I. Komarov © (2011-12-21 21:27) [11]А еще можно заметить, что если Капшен надо задать динамически, то и создавать их скорее всего удобнее также. И если необходимо, то запуздырить их всех в array of TButton...
← →
Ega23 © (2011-12-21 21:50) [12]
> А еще можно заметить, что если Капшен надо задать динамически,
> то и создавать их скорее всего удобнее также. И если необходимо,
> то запуздырить их всех в array of TButton...
1. Динамически или нет - это другой вопрос.
2. Где хранить ссылки - также другой вопрос.
3. Чем array of TButton удобнее TList или TObjectList?
← →
Anatoly Podgoretsky © (2011-12-21 21:56) [13]> Ega23 (21.12.2011 21:50:12) [12]
A чем плох Controls
← →
Ega23 © (2011-12-21 22:00) [14]
> A чем плох Controls
Да ничем, тащемта, кроме того, что рекурсивно надо перебирать по-хорошему.
← →
Anatoly Podgoretsky © (2011-12-21 22:03) [15]> Ega23 (21.12.2011 22:00:14) [14]
Он этим и хорошо, по сравнению с другими излишнеми средствами.
← →
Dennis I. Komarov © (2011-12-21 22:26) [16]
> 3. Чем array of TButton удобнее TList или TObjectList?
Да ничем по сути. Те же яйцы... С дженериками малость удобнее, хотя я их пока не особо заюзал...
← →
Германн © (2011-12-22 02:57) [17]
> Ega23 © (21.12.11 22:00) [14]
>
>
> > A чем плох Controls
>
>
> Да ничем, тащемта, кроме того, что рекурсивно надо перебирать
> по-хорошему.
Визуальные компоненты следует перебирать по свойству Controls, не так ли?
← →
Ega23 © (2011-12-22 08:57) [18]
> Визуальные компоненты следует перебирать по свойству Controls,
> не так ли?
См. [4].
А как следует перебирать - ИМХО, это следует из задачи. Я, например, через Components обычно выбираю и не парюсь, а что в динамике создано, то в TList<TControl> сидит каком-нибудь.
← →
Anatoly Podgoretsky © (2011-12-22 12:55) [19]> Германн (22.12.2011 02:57:17) [17]
Так, но возможно с рекурсией. Тогда контейнером можно указывать Form1
← →
OW © (2011-12-22 15:52) [20]
> Ega23 © (22.12.11 08:57) [18]
> а что в динамике создано, то в TList<TControl> сидит каком-
> нибудь.
какие-то проблемы могут быть, если не через Components перебирать таких?
← →
Anatoly Podgoretsky © (2011-12-22 16:29) [21]> OW (22.12.2011 15:52:20) [20]
У компоненты может не быть владельца и все сразу рухнет.
А у Controls такой проблемы нет.
← →
OW © (2011-12-22 16:31) [22]
> У компоненты может не быть владельца
ну да..вообще-то.
но надо делать тогда, что бы был. У меня всегда есть :)
← →
Ega23 © (2011-12-22 16:47) [23]
> какие-то проблемы могут быть, если не через Components
> перебирать таких?
Если Owner в конструкторе явный указывать, то никаких проблем.
Если не указывать - проблемы.
> но надо делать тогда, что бы был. У меня всегда есть :)
Ну перепиши генофонд, вызови у TComponent raise в конструкторе, если aOwner = nil
← →
Dennis I. Komarov © (2011-12-22 22:16) [24]
> Ну перепиши генофонд, вызови у TComponent raise в конструкторе,
> если aOwner = nil
бяка...
← →
Ega23 © (2011-12-22 22:16) [25]
> бяка...
>
Конечно бяка. Но при желании.... :)
← →
Inovet © (2011-12-22 22:23) [26]> [23] Ega23 © (22.12.11 16:47)
> Если Owner в конструкторе явный указывать, то никаких проблем.
> Если не указывать - проблемы.
Какие есть причины его не указывать?
← →
Dennis I. Komarov © (2011-12-22 23:24) [27]
> Конечно бяка. Но при желании.... :)
За такое в "Начинающих" казнить надо... :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2012.04.15;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.003 c