Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.003 c
15-1323763792
Dennis I. Komarov
2011-12-13 12:09
2012.04.15
WinXP без GUI...


4-1256327674
rubma
2009-10-23 23:54
2012.04.15
Память не может быть writen. В чем может быть проблема?


15-1323549004
Юрий
2011-12-11 00:30
2012.04.15
С днем рождения ! 11 декабря 2011 воскресенье


2-1324356955
Псарь
2011-12-20 08:55
2012.04.15
Найди дескриптор кнопки.


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский