|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Изменение цвета всех Shape - s
Добрый день, не хотелось создавать новую тему, но не нашел ничего общего с моим вопросом.
У меня есть много элементов 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
|
|||
|
|||
Не знаю что случилось.... Ничего не изменял заработало
Спасибо всем. |