19.07.2021 09:45:47 Fehler Fehler beim Laden des Hintergrund-Scripts D:\mAirList\scripts\Signal.mls: [Error] (32:32): 'THEN' expected
Das Skript sieht bei mir so aus:
const
BUTTONNAME = 'SIGNAL.ENC';
var
Count: integer;
EncoderState: Array of integer;
procedure OnLoad;
var
i: integer;
begin
Count := Encoder.GetConnections.GetCount;
SetLength(EncoderState, Count);
for i := 0 to Count - 1 do
begin
if Encoder.GetConnections.GetItem(i).GetState = ecsConnected then
EncoderState[i] := 1
else
EncoderState[i] := 0;
end;
end;
procedure OnEncoderConnectionStateChange(Connection: IEncoderConnection;
OldState, NewState: TEncoderConnectionState);
var
i, c: integer;
begin
i := Encoder.GetConnections.IndexOf(Connection);
if NewState = ecsConnected then
EncoderState[i] := 1
else if ((NewState = ecsDisconnected) OR (NewState = ecsConnecting))
AND (OldState = ecsConnected)) then
EncoderState[i] := 0;
c := 0;
Encoder.GetConnections.BeginRead;
try
for i := 0 to Count - 1 do
c := c + EncoderState[i];
if c = 0 then
ExecuteCommand(BUTTONNAME + ' BACKGROUNDCOLOR #FF0000')
else if c = Count then
ExecuteCommand(BUTTONNAME + ' BACKGROUNDCOLOR #00FF00')
else
ExecuteCommand(BUTTONNAME + ' BACKGROUNDCOLOR #FFFF00');
finally
Encoder.GetConnections.EndRead;
end;
end;
begin
end.
Nebenbei noch eine Frage: Ich würde gerne auch den Button-Text dem Zustand entsprechend anpassen, im Moment erschliesst sich mir nämlich nicht, ob das Skript dieses tut…
Grübel, grübel… Ich rieche ein Cross-Posting (von mir selbst), denn im Prinzip macht dieses hier ja genau das, was ich/wir wollen…
Wenn sich das hektische Blinken bei Verbindungsabbruch noch realisieren liesse und vielleicht auch das Polling durch die neue Funktion
// Called when the state of an encoder connection changes
procedure OnEncoderConnectionStateChange(Connection: IEncoderConnection; OldState, NewState: TEncoderConnectionState);
begin
end;
ersetzen lässt, wäre das Skript, zumindest für alle die nur einen Encoder verwenden wie ich, glaube ich genau richtig und wohl dann auch recht elegant.
To do:
Bildschirmobjekt “Statischer Text”, Aktion beim Anklicken “Encoder connect/disconnect”, Fernsteuerungs-ID “ONAIRPRG”
Background-Skript (noch ohne die genannten Wünsche):
procedure OnLoad;
begin
EnableTimer(100);
end;
procedure OnTimer;
begin
if (Encoder.GetConnections.GetItem(0).GetState = ecsConnected) then begin
ExecuteCommand('ONAIRPRG TEXT ON AIR');
ExecuteCommand('ONAIRPRG BACKGROUNDCOLOR #FF0000');
ExecuteCommand('ONAIRPRG FONTCOLOR #FFFFFF');
end
else if (Encoder.GetConnections.GetItem(0).GetState = ecsConnecting) then begin
ExecuteCommand('ONAIRPRG TEXT !OFF AIR!');
ExecuteCommand('ONAIRPRG FONTCOLOR #FFFFFF');
ExecuteCommand('ONAIRPRG BACKGROUNDCOLOR #FF0000');
Sleep(1000);
end
else begin
ExecuteCommand('ONAIRPRG BACKGROUNDCOLOR #00FF00');
ExecuteCommand('ONAIRPRG FONTCOLOR #FFFFFF');
ExecuteCommand('ONAIRPRG TEXT EDIT');
end;
end;
begin
end.
Das funktioniert so schon einmal. Die zusätzlichen Funktionen bzw. Änderungen einzubauen übersteigt dann doch bei weitem meine Fähigkeiten und ich wäre seeehr dankbar für Hilfe…
Danke @Tondose , nu’ geht’s!
Irgendwie muss ich jetzt noch die Texte zustandsbedingt verändern, also während des Verbindens als Anzeige “verbinde…”, “On AIr” & “Offline” oder ähnliches… Ich bastele mal…
Das machst Du, indem Du, wie beim zweiten, dem pollenden Skript, die Befehle jeweils in begin und end einpackst. Bzw. end;. Aber: keine Semikola vor else!
Sodele, hab’s zu 90% hinbekommen! Das einzige, was nicht funktioniert, ist der Wechsel auf Gelb (miit entsprechendem Text), wenn ich dem Rechner die Internetverbindung kurz klaue zum Testen, da springt die Anzeige dann nur auf (in meinem Fall) Farbe Grün und Text “EDIT”.
const
BUTTONNAME = 'SIGNAL.ENC';
var
Count: integer;
EncoderState: Array of integer;
procedure OnLoad;
var
i: integer;
begin
Count := Encoder.GetConnections.GetCount;
SetLength(EncoderState, Count);
for i := 0 to Count - 1 do
begin
if Encoder.GetConnections.GetItem(i).GetState = ecsConnected then
EncoderState[i] := 1
else
EncoderState[i] := 0;
end;
end;
procedure OnEncoderConnectionStateChange(Connection: IEncoderConnection;
OldState, NewState: TEncoderConnectionState);
var
i, c: integer;
begin
i := Encoder.GetConnections.IndexOf(Connection);
if NewState = ecsConnected then
EncoderState[i] := 1
else if ((NewState = ecsDisconnected) OR (NewState = ecsConnecting))
AND (OldState = ecsConnected) then
EncoderState[i] := 0;
c := 0;
Encoder.GetConnections.BeginRead;
try
for i := 0 to Count - 1 do
c := c + EncoderState[i];
if c = 0 then begin
ExecuteCommand(BUTTONNAME + ' BACKGROUNDCOLOR #00FF00');
ExecuteCommand(BUTTONNAME + ' TEXT EDIT');
end
else if c = Count then begin
ExecuteCommand(BUTTONNAME + ' BACKGROUNDCOLOR #FF000000');
ExecuteCommand(BUTTONNAME + ' TEXT ON AIR');
end
else begin
ExecuteCommand(BUTTONNAME + ' BACKGROUNDCOLOR #FFFF00');
ExecuteCommand(BUTTONNAME + ' TEXT !Verbinde...!');
end;
finally
Encoder.GetConnections.EndRead;
end;
end;
begin
end.
Na ja, dafür ist das Skript nicht gedacht gewesen. Es zeigt gelb, wenn von mehreren Verbindungen eine oder mehrere
abk*ckt. Ich dachte, ich hätte das erwähnt. Wenn Du die Zustände als solche unterscheiden willst, dann mußt Du für jeden eine Bedingung formulieren:
if NewState = ecsConnected then
begin
// mach was
// mach noch was
end
else if NewState = ecsConnecting then
begin
// mach was anderes
// mach noch was anderes
end;
Ich komme mal zurück auf das Skript von @Tondose in #33.
Irgendwie verweigert es bei mir die volle Funktionalität und ich krieg’s grad’ nicht auf die Reihe.
Also…
In v7.1 wird es nie grün, egal, ob ich nur einen oder mehrere Encoder angehakt habe.
Wenn zwei von zwei Encodern verbunden sind, bleibt alles gelb.
In v6.3 verhält es sich ebenso.
Übrigens wäre es hilfreich, wenn der Status des Encoders gleich zu Beginn abgefragt und entsprechend im statischen Text angezeigt würde.
Falls es das tun soll: Bei mir nicht, sorry.
Wo ist jetzt der Fehler?
@Myka:
Streng genommen muss ich - aktuell - ja auch nur einen Encoder abfragen, nämlich den produktiven Livestream (die Aufzeichnung in Datei funktioniert ja sowieso).
Wie gut klappt das bei dir? Rückmeldung und ggf. Austausch zwecks Ausbau meines Systems wäre erfreulich.
Ich kann’s nicht testen, da ich schon seit einer Weile keinen Server mehr habe… Zuletzt noch vor V7, und soweit ich mich erinnerte, lief es da auch noch… Dementsprechend habe ich sowohl Skript als auch das Screenobject wieder entfernt (und idiotischerweise die Skriptdatei nicht gesichert…).
Ich schaue mal, ob ich einen kostenlosen Streamserver zum Testen auftreiben kann und berichte dann, ob ich es wieder hinbekommen habe.
Kann aber dauern, Wochenende und so… Montag ist da eher wahrscheinlich, von daher; patience, please
… und dann noch den integrierten Streaming-Server, die lokale Audio-Ausgabe… sie alle connecten.
Zumindest im Encoder-Status wird mir da 2/2 angezeigt, und es würde mich doch wundern, wenn das Script sich da sperren würde.
Irgendwo in dieser Doppel-Else knallt es, dass der verbundene Status nicht in Nummer 2 stoppt (grün), sondern direkt zu Nummer 3 durchrauscht (gelb).
Da aber an anderer Stelle bereits bestätigt wurde, dass es grün so grün leuchten würde (#37), suche ich wie bekloppt nach der Stelle, wo ich eventuell einen Fehler mache.
Sollte es aber tatsächlich an einer Kleinigkeit seit damals™ bis zur heutigen v6.3.23 und höher liegen, dann müsste ich am Montag Morgen tatsächlich meinen Chef nerven…