|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Delphi поиск в списке
Мне нужно сделать визуализацию, но ее нет, т.к. все закрашевается только после того как цикл отработает. как сделать что бы было видно изменения по одному элементу? а не после отработки цикла..
Код:
procedure TForm5.Timer2Timer(Sender: TObject); var a: integer; begin if find.checked=true then begin k:= strtoint(edit1.Text); for i:= 1 to m do begin lbl1[i].Color:= clYellow; if lbl1[i].height=k then begin lbl1[i].Color:= clGreen; lbl2[i].Font.Color:= clGreen; //showmessage('find ', k); //exit end else lbl1[i].Color:= clRed; //exit; //i:= i+1; end; end; |
#2
|
||||
|
||||
Добавь application.ProcessMessages в цикле.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
bleex (03.06.2013)
|
#3
|
|||
|
|||
Добавлять в начало цикла? или после каждого оператора?
|
#4
|
||||
|
||||
Цитата:
|
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
bleex (03.06.2013)
|
#5
|
|||
|
|||
не замедляется..
|
#6
|
||||
|
||||
Цитата:
Код:
Sleep(5000); // Приостановка на 5 секунд |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
bleex (03.06.2013)
|
#7
|
|||
|
|||
Я вставил после каждого закрашивания, но работает нормально только в проверке (при закрашивании зеленым) если вставлять только в начале цикла (после желтого) проходит до 3го элемента и виснет, тоже самое если после закрашивания красным..
Код:
procedure TForm5.Timer2Timer(Sender: TObject); var a: integer; begin if find.checked=true then begin k:= strtoint(edit1.Text); for i:= 1 to m do begin //y:= i; //yellow; lbl1[i].Color:= clYellow; application.ProcessMessages; Sleep(500); if lbl1[i].height=k then begin //g:= i; //green lbl1[i].Color:= clGreen; lbl2[i].Font.Color:= clGreen; application.ProcessMessages; Sleep(500); //showmessage('find ', k); //exit end else //r:= i; //Red; lbl1[i].Color:= clRed; application.ProcessMessages; Sleep(500); //exit; //i:= i+1; end; end; end; |
#8
|
||||
|
||||
Цитата:
|
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
bleex (03.06.2013)
|
#9
|
|||
|
|||
Понял, спасибо !
Все работает, только теперь не останавливается таймер, сам себя так же запускает.. Все - разобрался. Работает только почему то 1 раз только работает поиск Последний раз редактировалось M.A.D.M.A.N., 03.06.2013 в 19:21. |
#10
|
||||
|
||||
Так, товарищ bleex, кончаем устраивать из форума чат и пользуемся кнопкой "Правка"!
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#11
|
|||
|
|||
Работает поиск 1 раз.
Если раскомментировать "Timer2.Enabled:= True;" в конце, то ищет бесконечно.. Код:
procedure TForm5.Timer2Timer(Sender: TObject); var a, с: integer; s: string; begin Timer2.Enabled:=False; с:= 0; if find.checked=true then begin k:= strtoint(edit1.Text); for i:= 1 to m do begin label1.Caption:= inttostr(i); lbl1[i].Color:= clYellow; application.ProcessMessages; Sleep(100); if lbl1[i].height=k then begin lbl1[i].Color:= clGreen; lbl2[i].Font.Color:= clGreen; с:= с+1; s:= inttostr(с); application.ProcessMessages; Sleep(100); if (i=m) and (с>0) then begin ShowMessage(s); Timer2.Enabled:=False; end; if (i=m) and (с=0) then begin ShowMessage('Закончено'); Timer2.Enabled:=False; end; end else lbl1[i].Color:= clRed; application.ProcessMessages; Sleep(100); if (i=m) and (с>0) then begin ShowMessage('Закончено'); Timer2.Enabled:=False; end; if (i=m) and (с=0) then begin ShowMessage('Таких элементов не найдено'); Timer2.Enabled:=False; end; end; end; //Timer2.Enabled:=True; end; |
#12
|
||||
|
||||
Вместо последующих после первого использования Timer2.Enabled:=False внутри процедуры попробуйте использовать Exit, надо прерывать цикл, если всё закончено.
З.Ы. Ну или нужно тогда глобальный флаг использовать - если он true, то продолжить, false - оставить как есть. Код:
Timer2.Enabled:= flg; Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 03.06.2013 в 19:52. |
#13
|
|||
|
|||
пробовал и exit и break - эффект один и тот же - либо 1 раз, либо бесконечно
насчет флага - что то не пойму.. Последний раз редактировалось bleex, 03.06.2013 в 19:57. |
#14
|
||||
|
||||
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#15
|
|||
|
|||
если вставляю break после смены цвета - ничего не меняется;
если ставлю exit - работает 1 раз, так же как и с timer.interval:=0 запускаю с кнопки: Код:
procedure TForm5.FindbClick(Sender: TObject); begin timer2.Interval:= 1000; end; |