![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как прервать выполнение цикла ? [D7, WinXP]
kyn66 © (2006-03-16 12:12:00)Уважаемые мастера, внутри моего цикла выполняется проигрывание звукового файла, получаемого из ресурса. Как мне при необходимости прервать этот цикл. Кнопка, при клике по которой выполняется цикл блокируется, а хотелось при повторном клике по ней этот цикл прервать. ProcessMessage почему-то не помогает.
procedure TMainFrm.SayButtonClick(Sender: TObject);
Var
i, j : Integer;
begin
IsSay := not IsSay;
Screen.Cursor := crHourGlass;
Application.Processmessage;
with SayStringGrid do
for i := 0 to Pred(RowCount) do
for j := 0 to Pred(ColCount) do
if Cells[j, i] <> '' then
begin
SayDigit(Cells[j, i], 2);
Delay(500);
if not IsSay then
Break;
end;
Screen.Cursor := crDEfault;
end;
kyn66 (2006-03-16 13:15:00) [1]>>Сергей М
Спасибо за подсказку, помогло
kyn66 (2006-03-16 12:48:00) [2]> Я думал у него Button.enabled:= false
Нет, форма вся блокируется. Для этого Processmessages и нужен....
balepa (2006-03-16 12:38:00) [3]p.s. Я думал у него Button.enabled:= false
balepa (2006-03-16 12:34:00) [4]
> Как это "при чём"? Проигрывание же в основном потоке идёт.
> ..
Да проехали уже
Ega23 (2006-03-16 12:33:00) [5]
> А причем тут ProcessMessage?
Как это "при чём"? Проигрывание же в основном потоке идёт...
Сергей М. (2006-03-16 12:29:00) [6]procedure TMainFrm.SayButtonClick(Sender: TObject);
Var
i, j : Integer;
begin
If IsSay then
IsSay := False
else begin
IsSay := True;
while IsSay do begin
// вот она, та самая итерация цикла !
...
Application.ProcessMessages;
...
end;
end;
end;
kyn66 (2006-03-16 12:24:00) [7]>Сергей М
> Его следует разместить в итерации цикла, а не перед входом в цикл.
Это как понять? Всмысле здесь?
with SayStringGrid do
for i := 0 to Pred(RowCount) do
for j := 0 to Pred(ColCount) do
if Cells[j, i] <> '' then
begin
Application.Processmessage; <-- ???
SayDigit(Cells[j, i], 2);
Delay(500);
if not IsSay then
Break;
end;
balepa (2006-03-16 12:17:00) [8]Сделай еще одну кнопку
А причем тут ProcessMessage?
Сергей М. (2006-03-16 12:15:00) [9]Ты не туда влупил Application.Processmessages.
Его следует разместить в итерации цикла, а не перед входом в цикл.