![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый день, не хотелось создавать новую тему, но не нашел ничего общего с моим вопросом.
У меня есть много элементов Shape. И при определенных условиях мне нужно им всем менять цвета. Но для каждого прописывать отдельно это очень долго и не красиво.... как обращаться к ним? Код:
if {условие1} then
begin
for j:=1 to 50 do
begin
Shape[j].Brush.Color:= clMoneyGreen; // ну это ест-но не работает
end
else
begin
for j:=1 to 50 do
begin
Shape[j].Brush.Color:= clLime;
end;
end;Как такое организовать? |
|
#2
|
|||
|
|||
|
Код:
for I := 0 to ComponentCount - 1 do
if Components[i] is TShape then
if {условие} then
TShape(Components[i]).Color := clMoneyGreen
else
TShape(Components[i]).Color := clLime;а ещё лучше если Вы эти шейпы нагенерировали (поиск: динамическое создание компонентов), и сложили в некий контейнер, например массив, и пробегаться в цикле надо будет только по нему, а не по свойству-массиву формы для компонентов, коих может быть много левых. Что пишете ? если игру или какую динамическую графику, то лучше сразу откажитесь от шейпов и переходите на записи/объекты с прорисовкой на канвас. Последний раз редактировалось phomm, 25.02.2015 в 19:55. |
| Этот пользователь сказал Спасибо phomm за это полезное сообщение: | ||
avis_rara (26.02.2015)
| ||
|
#3
|
|||
|
|||
|
Спасибо большое!
"(условие тоже в цикл перенёс, т.к. это тоже некрасиво и неправильно, когда для проверки условия вы делаете 2 цикла)" - это я для наглядности так сделал=) "а ещё лучше если Вы эти шейпы нагенерировали (поиск: динамическое создание компонентов), и сложили в некий контейнер, например массив, и пробегаться в цикле надо будет только по нему, а не по свойству-массиву формы для компонентов, коих может быть много левых. " - у меня эти "шейпы" выполняют роль button-ов, на каждый есть обработчик и соответственно при нажатии на каждый я изменяю цвет, чтоб было понятно вкл/выкл. Но иногда программа сама должна изменять состояние кнопок (долго расписывать) и она изменяет - все работает но цвет... Но в обеих случаях отдельно прописывать каждый раз (напр.) Shape32.Brush.Color:= clLime туповато...))) но, увы, не знал как такое сделать. Я только учусь... Спасибо Вам БОЛЬШОЕ! |
|
#4
|
||||
|
||||
|
Можно ещё по имени обращаться, если они по-порядку идут
Код:
for i := 1 to 9 do
(FindComponent('Shape' + IntToStr(i)) as TShape).Color:= clMoneyGreen; |
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
avis_rara (26.02.2015)
| ||
|
#5
|
|||
|
|||
|
не работает
По идее это условие не выполняется Код:
if Components[i] is TShape then А если пробую напрямую подставлять Код:
(FindComponent('Shape' + IntToStr(i)) as TShape).Brush.Color:= clMoneyGreen;По сути в обеих случаях одно и то же. Что может быть? |
|
#6
|
|||
|
|||
|
Не знаю что случилось.... Ничего не изменял заработало
Спасибо всем. |