Код:
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;
Примерно так (условие тоже в цикл перенёс, т.к. это тоже некрасиво и неправильно, когда для проверки условия вы делаете 2 цикла)
а ещё лучше если Вы эти шейпы нагенерировали (поиск: динамическое создание компонентов), и сложили в некий контейнер, например массив, и пробегаться в цикле надо будет только по нему, а не по свойству-массиву формы для компонентов, коих может быть много левых.
Что пишете ? если игру или какую динамическую графику, то лучше сразу откажитесь от шейпов и переходите на записи/объекты с прорисовкой на канвас.