Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ В чём ошибка?

Автор: Egor 10.03.2007 3:04

Вобщем сама процедура должна подавать на порт 888 попеременно 255 и 0. Включение и отключение одной кнопкой. В режиме отладки всё нормально, а как запускаю то получается что первый сигнал подаётся, а потом... фигня какаято mad.gif

Код

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;

Автор: #$# PaVeL #$# 11.03.2007 8:50

Я думаю вся ошибка из-за:

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;
- код сырой, тк писал без Delphi...
cool.gif