Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.02.2015, 18:29
avis_rara avis_rara вне форума
Прохожий
 
Регистрация: 01.07.2014
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Изменение цвета всех 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  
Старый 25.02.2015, 19:50
phomm phomm вне форума
Новичок
 
Регистрация: 07.10.2013
Адрес: Тюмень
Сообщения: 50
Версия Delphi: 7/2007/XE+/FPC
Репутация: 22
По умолчанию

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

Что пишете ? если игру или какую динамическую графику, то лучше сразу откажитесь от шейпов и переходите на записи/объекты с прорисовкой на канвас.

Последний раз редактировалось phomm, 25.02.2015 в 19:55.
Ответить с цитированием
Этот пользователь сказал Спасибо phomm за это полезное сообщение:
avis_rara (26.02.2015)
  #3  
Старый 25.02.2015, 22:21
avis_rara avis_rara вне форума
Прохожий
 
Регистрация: 01.07.2014
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо большое!
"(условие тоже в цикл перенёс, т.к. это тоже некрасиво и неправильно, когда для проверки условия вы делаете 2 цикла)" - это я для наглядности так сделал=)

"а ещё лучше если Вы эти шейпы нагенерировали (поиск: динамическое создание компонентов), и сложили в некий контейнер, например массив, и пробегаться в цикле надо будет только по нему, а не по свойству-массиву формы для компонентов, коих может быть много левых.
" - у меня эти "шейпы" выполняют роль button-ов, на каждый есть обработчик и соответственно при нажатии на каждый я изменяю цвет, чтоб было понятно вкл/выкл. Но иногда программа сама должна изменять состояние кнопок (долго расписывать) и она изменяет - все работает но цвет... Но в обеих случаях отдельно прописывать каждый раз (напр.) Shape32.Brush.Color:= clLime туповато...))) но, увы, не знал как такое сделать. Я только учусь...
Спасибо Вам БОЛЬШОЕ!
Ответить с цитированием
  #4  
Старый 25.02.2015, 22:45
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Можно ещё по имени обращаться, если они по-порядку идут
Код:
for i := 1 to 9 do
  (FindComponent('Shape' + IntToStr(i)) as TShape).Color:= clMoneyGreen;
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
avis_rara (26.02.2015)
  #5  
Старый 26.02.2015, 14:26
avis_rara avis_rara вне форума
Прохожий
 
Регистрация: 01.07.2014
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

не работает
По идее это условие не выполняется
Код:
if Components[i] is TShape then
Так как программа на него никак не реагирует...
А если пробую напрямую подставлять
Код:
(FindComponent('Shape' + IntToStr(i)) as TShape).Brush.Color:= clMoneyGreen;
Компилирует, но при работе программы когда доходит до этого места выдает ошибку.
По сути в обеих случаях одно и то же.
Что может быть?
Ответить с цитированием
  #6  
Старый 26.02.2015, 15:05
avis_rara avis_rara вне форума
Прохожий
 
Регистрация: 01.07.2014
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Не знаю что случилось.... Ничего не изменял заработало
Спасибо всем.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:59.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter