Показать сообщение отдельно
  #5  
Старый 15.07.2013, 15:58
vazer vazer вне форума
Прохожий
 
Регистрация: 14.07.2013
Сообщения: 4
Версия Delphi: delphi 2010
Репутация: 10
По умолчанию

Код:
procedure TForm1.Timer1Timer(Sender: TObject); //действие по таймеру
var
 mark,endofupr:boolean;
 i,x,l,m,n1:integer;
 mas: array of integer;
begin
   i:=0;
   SetLength(mas, Listbox1.Items.Count);
   for i:=0 to Listbox1.Items.Count do
   mas[i]:=999; //забил весь массив такими элементами, они точно не встретятся, а их будет нужно сравнивать 
   endofupr:=true;
   mark:=true;
   Timer1.enabled := false; //выключаем таймер
       if checkbox1.Checked=true then //если выводить рандомно
          begin
              Randomize;
              k:=Random(Listbox1.Items.Count);//выбираем число между количеством строк
                 if checkbox2.Checked = true then //если без повторений
                      begin
                        if j>0 then //первый случай мы уже учли внизу
                         while mark=true do
                             begin
                               mark:=false;
                               k:=Random(Listbox1.Items.Count);
                               for i:=0 to length(mas)-1 do
                               if k=mas[i] then mark:=true;
                             end;
                         mas[j]:=k;
                         j:=j+1;
                           if j=Listbox1.Items.Count then
                            begin
                             showmessage('last exercise for today');
                             endofupr:=false;
                            end;
                       end;

              edit3.Text:=edit3.Text+'['+inttostr(mas[j])+']'; //это всякая фигня для проверки. 
//и вот эти мас[i] почему-то по выводу равны [999], хотя им нужно присвоить номера строк. почему не присваиваются -не понимаю
              edit3.Text:=edit3.Text+inttostr(k);
              //edit3.Text:=edit3.Text+'('+inttostr(j)+')';

              upr:= ListBox1.Items[k];
          end
                                  else //если не рандомные и тд



Так, я, пожалуй, ошибся, вывесив только часть кода. так, думаю, будет проще понять что и как. а то тут вы говорите про лишние энды, и мало ли где я еще напутал при редактироваании. а это ж к делу не относится.
собственно выводом по таймеру управляют два чекбокса: один из них отевчает за случайный вывод. а второй за вывод с/без повторениями.
как уже говорил, у меня проблема с рандомом без повторений.

сейчас попробую сделать массив не чисел с номерами строк, а просто со строками, и выводить напрямую из него. ну, мало ли.

и да, я не понял почему upr:=... перенести вверх

если вы о том, что это присваивание и вывод должны быть в цикле, то нет. это единичное действие по таймеру, а этиот таймер будет включаться не раз, так что вот как раз в каждое включение нужно вывести один, не повторяющийся, элемент

то есть конкретно в этой процедуре выводится одна строка, просто она(процедура) выполняется несколько раз.ну и эти строки, повторяюсь, не должны, гхм, пардон за такое построение предложения, повторяться.
Ответить с цитированием