Как провести различие между сменой пользователя на элемент управления (Slider) или программой c? - PullRequest
0 голосов
/ 26 января 2020

У меня есть ползунок для изменения громкости, но после смены пользователя я постепенно изменяюсь на новое значение (в процессе обновления ползунка текущая громкость). Я использую свойство TAG ползунков, чтобы указать изменение программы c, пока я обновляю его позицию, но каким-то образом это все равно вызывает мою процедуру new-target-volume и, таким образом, отменяет весь тинг. Что я делаю не так?

procedure TMain.VolumeBarChange(Sender:TObject);
begin
  try
    If VolumeBar.Tag=0 then Begin;
       StartVolumeFade(IncSecond(Now,3),VolumeBar.Position);
       LogWrite('Volume changed via slider.',debug);
    End else begin;
      LogWrite('Ignoring Volumebar change.',debug);
    end;
  except

  end;
end;

и

procedure TMain.UpdateVolumeBar;

Var
  CurrentVolume:Integer;

Begin;
  VolumeBar.Tag:=1;
  try
    CurrentVolume:=GetPlayerVolume;
    If CurrentVolume>-1 then Begin;
      VolumeBar.Enabled:=TRUE;
      VolumeBar.Position:=CurrentVolume;
    end else Begin;
      VolumeBar.Enabled:=FALSE;
      VolumeBar.Position:=0;
    End;
  except
     //removed for post
  End;
  VolumeBar.Tag:=0;
End;

какие-либо причины, почему это не должно работать? У меня такое ощущение, что событие OnChange срабатывает слишком поздно (после того, как мой UpdateVolumebar уже завершен) ...: - /

...