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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.08.2011, 20:46   #1
Tuman777
Пользователь
 
Регистрация: 10.07.2011
Сообщений: 37
По умолчанию Randomize и Image

Доброго времени суток, Уважаемые знатоки програмирования.
Помогите обуздать рандомиз. В общем проблема такая: есть 10 imag, 3 таимера. Нужно чтобы при открывании формы имиджи перемешивались как мозайка, т.е. например 1 имидж на место 4 и т.д., но не накладывались друг на друга. И чтобы это перемешивание носило непредсказуемый характер.
Изображения
Тип файла: jpg 777.jpg (241.1 Кб, 146 просмотров)
Tuman777 вне форума Ответить с цитированием
Старый 24.08.2011, 21:01   #2
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Мало таймеров.
Для "обуздания рандомиза" нужно еще полсотни.
mss вне форума Ответить с цитированием
Старый 24.08.2011, 21:09   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Ну
1, нужно TImage создавать в RunTime.
2, Нужно програмно резать картинку
3, нужен класс, который будет все это хранить.

Таймерами ты этого не сделаешь=)

А вообще:
Использовать RandomRange в котором определять номер TImage в который пихнуть также определённую через RandomRange картинку.
Правда что ты будешь делать с возможными дубликатими =) По этому лучше по человечески через написания целого класса=)

Последний раз редактировалось Человек_Борща; 24.08.2011 в 21:11.
Человек_Борща вне форума Ответить с цитированием
Старый 24.08.2011, 21:15   #4
Tuman777
Пользователь
 
Регистрация: 10.07.2011
Сообщений: 37
По умолчанию

Спасибо за то что уделяете мне внимание.
Но я наверно не так выразился. Таймеры не для того чтобы перемешивать имиджи, у них совсем другое предназначение. Перемешиванием имиджей должна заниматься

procedure TForm1.FormCreate(Sender: TObject);
Tuman777 вне форума Ответить с цитированием
Старый 24.08.2011, 21:29   #5
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
Таймеры не для того чтобы перемешивать имиджи, у них совсем другое предназначение
Но для пущего понта в вопросе про "обуздание рандомиза", к коему твои таймеры не имеют ни малейшего отношения, всенепременно нужно заявить что их у тебя есть аж целых три.
mss вне форума Ответить с цитированием
Старый 24.08.2011, 21:34   #6
Tuman777
Пользователь
 
Регистрация: 10.07.2011
Сообщений: 37
По умолчанию

Код:
Но для пущего понта в вопросе про "обуздание рандомиза", к коему твои таймеры не имеют ни малейшего отношения, всенепременно нужно заявить что их у тебя есть аж целых три.
они для того чтобы в ограниченное время выбрать правильную картинку, что-то вроде теста
Tuman777 вне форума Ответить с цитированием
Старый 24.08.2011, 21:35   #7
Tuman777
Пользователь
 
Регистрация: 10.07.2011
Сообщений: 37
По умолчанию

Цитата:
они для того чтобы в ограниченное время выбрать правильную картинку, что-то вроде теста
это не код а цитата
Tuman777 вне форума Ответить с цитированием
Старый 24.08.2011, 21:37   #8
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
они для того чтобы в ограниченное время выбрать правильную картинку
И всем это страшно интересно знать, особенно когда вопрос стоит конкретно про "обуздание рандомиза".
mss вне форума Ответить с цитированием
Старый 24.08.2011, 21:42   #9
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

полагаю то что нужно
Код:
//перемешивание имеджей
procedure TForm1.Button1Click(Sender: TObject);
var i:byte; p:word;
begin
for i:=0 to ComponentCount-1 do
if Components[i] is TImage then begin
repeat
p:=random(length(pozition));
until (pozition[p].X<>0)and(pozition[p].y<>0);
(Components[i] as TImage).Left:=pozition[p].X;
(Components[i] as TImage).top:=pozition[p].y;
ZeroMemory(@pozition[p],sizeof(pozition[p]));
end;

end;

//тут я разукрашую 6 имеджей на форме в разные цвета
procedure TForm1.Button2Click(Sender: TObject);
const cvet:array[0..5]of Tcolor=(clBlue,clWhite,clGreen,clYellow,clred,cllime);
var i:byte;
begin
for i:=0 to ComponentCount-1 do
if Components[i] is TImage then begin
  pozition[i].X:=(Components[i] as TImage).Left;
  pozition[i].y:=(Components[i] as TImage).top;
  (Components[i] as TImage).Canvas.Brush.Color:=cvet[i];
  (Components[i] as TImage).Canvas.Rectangle(0,0,105,105);
end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
end;
fate вне форума Ответить с цитированием
Старый 24.08.2011, 21:43   #10
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

думаю сам принцип понятен
fate вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
random/randomize Ya_Aston Помощь студентам 8 17.12.2010 19:49
Delphi Randomize tanek Помощь студентам 5 31.05.2010 20:52
Randomize )Игнат( Паскаль, Turbo Pascal, PascalABC.NET 13 03.02.2009 16:51
Функция Randomize MaXXX Общие вопросы Delphi 2 23.09.2008 11:42