Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.04.15;
Скачать: CL | DM;

Вниз

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.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";


Как-то так.


 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.008 c
2-1324407105
Gu
2011-12-20 22:51
2012.04.15
юникод


2-1324572024
Каныбек
2011-12-22 20:40
2012.04.15
Memo, сохранение


15-1323694886
Artem
2011-12-12 17:01
2012.04.15
Какое основное отличие Serial от Ethernet a?


15-1323686319
alexdn
2011-12-12 14:38
2012.04.15
Настройка Outlook express


6-1254940473
__Алексей__
2009-10-07 22:34
2012.04.15
Глупый вопрос про подсчет трафика и GetIfTable