Fiz outra alteração neste método, a variável de controle Monitorando recebe MonitorarBalanca e tinha mais uma linha que removi que a variável Monitorando recebia False, perdia todo sentido desta variável. o que acontecia era que quando chamava o lepeso da forma que estava ele desabilitava o monitorarBalanca e não ativava mais. assim é armazenado o status do MonitorarBalanca e setado para False no final e atribuído o valor de quando entrou no método.
function TACBrBAL.LePeso( MillisecTimeOut : Integer) : Double;
Var
Ativado, Monitorando : Boolean ;
begin
Ativado := Ativo ;
Monitorando := MonitorarBalanca ;
try
MonitorarBalanca := False ;
if not Ativado then { Ativa caso não tenha sido ativado antes }
Ativar ;
Result := fsBAL.LePeso( MillisecTimeOut ) ;
if Assigned( fsOnLePeso ) then
fsOnLePeso( UltimoPesoLido, UltimaResposta ) ;
finally
Ativo := Ativado ;
MonitorarBalanca := Monitorando ;
end ;
end;