Помощь - Поиск - Пользователи - Календарь
Полная версия: В чём ошибка?
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Egor
Вобщем сама процедура должна подавать на порт 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 #$#
Я думаю вся ошибка из-за:
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
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.