Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2012, 12:29   #1
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию окружности,меняющие цвет в случ. порядке

на форме есть 25 окружностей (shape). как сделать что при запуске формы они должны в случайном порядке менять цвет?
kate158 вне форума Ответить с цитированием
Старый 23.05.2012, 12:54   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

очевидно, что проходиться по шейпам в цикле, получать случайный цвет через Random и задавать каждой окружности полученный случайный цвет...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.05.2012, 13:03   #3
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

как выглядит цикл по шейпам?
kate158 вне форума Ответить с цитированием
Старый 23.05.2012, 13:19   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Так же, как и для других контролов
Код:
for i:=0 to ControlCount-1 do
  if Controls[i] is TShape then TShape(Controls[i]).что-то
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.05.2012, 13:27   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
как выглядит цикл по шейпам?
ну, для этого нужно знать, как Вы их создавали, где они находятся (на форме, на панели), какие у них имена и т.д.

так, например (цикл переберёт вообще все имеющиеся на форме Shape-ы):
Код:
procedure TForm1.FormCreate(Sender: TObject);
var i: integer;
begin
  Randomize;
  for i := 0 to ComponentCount-1 do
    if Components[i] is TShape then
       TShape(Components[i]).Brush.Color := Random($7FFFFF)-$7FFF;
end;
ВНИМАНИЕ!!! Процедура получения случайного цвета ЗАВЕДОМА косячная - написал её "на коленке" просто чтобы проиллюстрировать свои слова. Использовать на практике НЕ РЕКОМЕНДУЮ!

Последний раз редактировалось Serge_Bliznykov; 23.05.2012 в 13:29.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.05.2012, 14:37   #6
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

мне нужно чтобы не цвет менялся, а менялся выбор шейпа. т.е. есть на форме все белые шейпы, через 5 секунд случайный стал желтым, затем белым; еще через 5 секунд следующий случайный стал желтым, затем белым и т.д.
как изменить код:
Код:
  private
   FShapes : array [1..30] of TShape;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
var
   i : integer;
begin
   i:=1+Random(30);
   FShapes[i].Color:=clYellow;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   FShapes[1]:=Shape1;
   FShapes[2]:=Shape2;
   FShapes[3]:=Shape3;
   FShapes[4]:=Shape4;
   FShapes[5]:=Shape5;
   FShapes[6]:=Shape6;
   FShapes[7]:=Shape7;
   FShapes[8]:=Shape8;
   FShapes[9]:=Shape9;
   FShapes[10]:=Shape10;
   FShapes[11]:=Shape12;
   FShapes[12]:=Shape13;
   FShapes[13]:=Shape14;
   FShapes[14]:=Shape15;
   FShapes[15]:=Shape16;
   FShapes[16]:=Shape17;
   FShapes[17]:=Shape18;
   FShapes[18]:=Shape19;
   FShapes[19]:=Shape20;
   FShapes[20]:=Shape21;
   FShapes[21]:=Shape22;
   FShapes[22]:=Shape23;
   FShapes[23]:=Shape24;
   FShapes[24]:=Shape25;
   FShapes[25]:=Shape26;
   FShapes[26]:=Shape27;
   FShapes[27]:=Shape28;
   FShapes[28]:=Shape29;
   FShapes[29]:=Shape30;
   FShapes[30]:=Shape31;
end;

Последний раз редактировалось kate158; 23.05.2012 в 14:47.
kate158 вне форума Ответить с цитированием
Старый 23.05.2012, 15:38   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, на создании формы (событие FormCreate) нужен вызов
Код:
Randomize;
для иницилизации генератора случайных чисел.

во-вторых,
Цитата:
Код:
  FShapes[10]:=Shape10;
   FShapes[11]:=Shape12;
Shape11 потерян не случайно?..

в-третьих, добавьте переменную, где Вы будете сохранять, какой Shape стал жёлтым. его делать белым. а новый случайный - жёлтым.

в коде это будет примерно так выглядеть:
Код:
 private
   FShapes : array [1..30] of TShape;
   FRandomYellowIndex : integer;
  public
.....

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   FShapes[FRandomYellowIndex].Color:=clWhite;
   FRandomYellowIndex := Low(FShapes) + Random( High(FShapes) - Low(FShapes) + 1 );
   FShapes[FRandomYellowIndex].Color:=clYellow;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
   Randomize;
   FRandomYellowIndex := 1; {в начале у вас все шейпы белые. если захотите сделать при запуске один жёлтым, то не забудьте его номер присвоить переменной!}
   FShapes[1]:=Shape1;
   FShapes[2]:=Shape2;
....

p.s. теоретически может выпасть два раза подряд один и тот же случайный индекс. это легко отследить и предотвратить, если есть в этом необходимость...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.05.2012, 20:17   #8
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Самый экономичный метод:
создать BMP в 256-цветном режиме, нарисовать окружности первыми 25-ю цветами, менять только первые 100 байт палитры (25 целых четырехбайтовых чисел по рандому в диапазоне 16777216).

Последний раз редактировалось s-andriano; 23.05.2012 в 20:21.
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Требуется программа - генератор случ. чисел Aesera Фриланс 3 10.06.2011 18:24
Нормальное распределение случ величины андей Microsoft Office Excel 4 13.11.2009 21:33
Сгенерировать последовательность 100, случ. чисел (и сделать график) igarek222 Помощь студентам 6 08.10.2009 12:47
отсортировать таблицу сначала в алфавитном порядке фамилий продавцов, затем в порядке возростания получен Lora Microsoft Office Excel 1 31.05.2008 17:22
Построение графиков распределения случ. величин Sapog Помощь студентам 2 08.04.2007 13:45