Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.02;
Скачать: CL | DM;

Вниз

Как прервать выполнение цикла ?   Найти похожие ветки 

 
kyn66 ©   (2006-03-16 12:12) [0]

Уважаемые мастера, внутри моего цикла выполняется проигрывание звукового файла, получаемого из ресурса. Как мне при необходимости прервать этот цикл. Кнопка, при клике по которой выполняется цикл блокируется, а хотелось при повторном клике по ней этот цикл прервать. 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;


 
Сергей М. ©   (2006-03-16 12:15) [1]

Ты не туда влупил Application.Processmessages.
Его следует разместить в итерации цикла, а не перед входом в цикл.


 
balepa ©   (2006-03-16 12:17) [2]

Сделай еще одну кнопку
А причем тут ProcessMessage?


 
kyn66 ©   (2006-03-16 12:24) [3]

>Сергей М
> Его следует разместить в итерации цикла, а не перед входом в цикл.
Это как понять? Всмысле здесь?

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;


 
Сергей М. ©   (2006-03-16 12:29) [4]

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;


 
Ega23 ©   (2006-03-16 12:33) [5]


> А причем тут ProcessMessage?


Как это "при чём"? Проигрывание же в основном потоке идёт...


 
balepa ©   (2006-03-16 12:34) [6]


> Как это "при чём"? Проигрывание же в основном потоке идёт.
> ..

Да проехали уже


 
balepa ©   (2006-03-16 12:38) [7]

p.s. Я думал у него Button.enabled:= false


 
kyn66 ©   (2006-03-16 12:48) [8]

> Я думал у него Button.enabled:= false
Нет, форма вся блокируется. Для этого Processmessages и нужен....


 
kyn66 ©   (2006-03-16 13:15) [9]

>>Сергей М
Спасибо за подсказку, помогло



Страницы: 1 вся ветка

Текущий архив: 2006.04.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
2-1142504140
KyRo
2006-03-16 13:15
2006.04.02
Занят файл или нет ?


15-1141377982
Некто
2006-03-03 12:26
2006.04.02
хех =) Баян наверно


15-1142333200
Alexis
2006-03-14 13:46
2006.04.02
Языки, поддерживаемые в BDS 2006 ...


8-1130308609
Romanina
2005-10-26 10:36
2006.04.02
Проигрывание wav с помощью DirectSound


6-1134836998
ReFresh
2005-12-17 19:29
2006.04.02
Отключить "подключение по локальной сети"