Вобщем сама процедура должна подавать на порт 888 попеременно 255 и 0. Включение и отключение одной кнопкой. В режиме отладки всё нормально, а как запускаю то получается что первый сигнал подаётся, а потом... фигня какаято
Код
procedure TForm1.Button3Click(Sender: TObject); begin if clipping then begin button3.Caption:='On'; clipping:=False; exit; end else begin button3.Caption:='Off'; clipping:=true; while clipping do begin out32(888,255); sleep(100); application.ProcessMessages; out32(888,0); end; end; end;
begin button3.Caption:='Off'; clipping:=true; while clipping do begin out32(888,255); sleep(100); application.ProcessMessages; out32(888,0); end; end;
: 1) Цикл в кнопке - Это очень ПЛОХО, как останавливать его собираешься, когда он не закончился!?! 2) тем более после
out32(888,0);
-нет задержки, идёт сразу
out32(888,255);
=> не изменяет состояние.
Предлагаю попробовать через таймер: Кнопка - запускает и останавливает таймер, а таймер (с интервалом 100 мс):
Var SendMM: Boolean; // Глобальная переменная ... Procedure TXXX.Timer1.Timer(Sender: TObject); Begin SendMM := Not SendMM; // Изменяем состояние флага If SendMM Then // В зависимости от него, за одно срабатывание таймера, устанавливаем нужное значение... out32(888,255) Else out32(888,0); End;