![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Мне нужно сделать визуализацию, но ее нет, т.к. все закрашевается только после того как цикл отработает. как сделать что бы было видно изменения по одному элементу? а не после отработки цикла..
Код:
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 в цикле.
|
| Этот пользователь сказал Спасибо 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, кончаем устраивать из форума чат и пользуемся кнопкой "Правка"!
|
|
#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; |