Mit welcher mAirList-Version bist Du denn unterwegs und mit welcher funktionierte Dein Skript?
Feststellende Grüße
TSD
Mit welcher mAirList-Version bist Du denn unterwegs und mit welcher funktionierte Dein Skript?
Feststellende Grüße
TSD
mAirList ist wie immer aktuell und das Skript funktionierte mit der 6.0 noch vor cirka zwei Jahren. Genauer kann ich es leider nicht mehr sagen…
schubs… Ich stehe leider immer noch auf dem Schlauch. Wäre nett, wenn jemand eine Idee hat und die mir mitteilen mag.
Liebe Grüsse!
Kommando zurück!
Das Problem sass mal wieder vor dem Bildschirm. Das Screenobject muss vom Typ “Statischer Text” sein, kein Button!!!
Blond und doof!
Aber nicht zu doof um den Fehler zu entdecken! Danke für die Rückmeldung.
Erkannte Grüße
TSD
Mich würden ein paar Hintergründe zum Script interessieren. Sehe ich das richtig, es setzt ein Bildschirmobjekt (Text) je nach Status des Encoders?
ONAIRPRG
ist der Name Deines Bildschirmobjektes?
Würde sowas mit einem Button und einem Weiteren Status auch funktionieren?
Mit dem Button möchte ich die Encoder Verbindung ein oder aus schalten können.
Ich würde also folgende stati abfragen wollen:
Encoder aktiv (Also ist der Haken vor dem jeweiligen Eintrag gesetzt oder nicht)
Sendung läuft (Für die Encoder, die auch scharf geschaltet sind)
@Anna_On_Air hatte da mal sowas in der Richtung gebaut, finde ich nur gerade nicht wieder.
EDIT: Ich habe das mal probiert und lande in einem Syntax Error:
procedure OnLoad;
begin
EnableTimer(100);
end;
procedure OnTimer;
begin
if (Encoder.GetConnections.GetItem(0).GetState = ecsConnected) then begin
if Encoder.GetConnections.GetItem(0).GetState = ecsConnected then
ExecuteCommand(‘ONAIRPRG TEXT ON AIR’);
ExecuteCommand(‘ONAIRPRG BACKGROUNDCOLOR #FF0000’)
ExecuteCommand(‘ONAIRPRG FONTCOLOR #FFFFFF’)
end
else begin
ExecuteCommand(‘ONAIRPRG BACKGROUNDCOLOR #00FF00’)
ExecuteCommand(‘ONAIRPRG FONTCOLOR #000000’)
ExecuteCommand(‘ONAIRPRG TEXT KEINE SENDUNG!’)
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;
ExecuteCommand(‘ONAIRPRG BACKGROUNDCOLOR #00FF00’)
ExecuteCommand(‘ONAIRPRG FONTCOLOR #000000’)
ExecuteCommand(‘ONAIRPRG TEXT KEINE SENDUNG!’);
end;
end;
begin
end.
Habe das mal versucht etwas anders zu formatieren.
Auf die schnelle sehe ich da ganz viele fehlende Semikola und ein nicht vorhandenes end;
(wie kann man etwas fehlendes sehen?) hinter dem ersten … KEINE SENDUNG
. Ansonsten müßte man nochmal genau schauen.
Mobile Grüße
TSD
Edit:
Die erste if
-Zeile scheint doppelt zu sein.
Dafür fehlt hinter der zweiten das begin
.
Hinter alle ExecuteCommand
-Zeilen müssen Semikola.
Hinter dem zweiten Dreierblock fehlt ein end;
.
Vor dem letzten Dreierblock fehlt eine if
-Bedingung
Insgesamt ist mir noch nicht ganz klar, wie das laufen soll. Die beiden KEINE SENDUNG
-Blöcke sind gleich. Wäre da nicht folgende Struktur angezeigt?:
// Verkürzte Darstellung!!
begin
if Encoder. = ecsConnected then begin // Wenn eine Bedingung, dann …
ExecuteCommand…;
ExecuteCommand…;
ExecuteCommand…;
end
else if Encoder. = ecsConnecting then begin // Wenn eine andere Bedingung, dann halt …
ExecuteCommand…;
…
…
end
else begin // Ansonsten …
ExecuteCommand…;
…
…
end;
end;
begin
end.
Woher kommen die Variablen ecsConnected
und ecsConnecting
?
Tip: Einrücken der Zeilen nur mit Leerzeichen, und zwar zweierlesweise. Damit schaut es dann auf jedem Browser/Editor gut aus.
Vielen Dank @Tondose, ich bin ja noch blutiger Anfänger was Scripting angeht aber dann hatte ich zumindest schon mal die richtigen Gedanken dazu.
Der letzte Befehlsblock würde ja auch alles vorherigen if-abfragen überschreiben.
Die erste doppelte if Abfrage hatte ich als Verschachtelung angesehen, der Sinn, erschließt sich mir noch nicht so wirklich.
Da kommt dann das bei raus.
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 begin
ExecuteCommand(‘ONAIRPRG BACKGROUNDCOLOR #00FF00’);
ExecuteCommand(‘ONAIRPRG FONTCOLOR #000000’);
ExecuteCommand(‘ONAIRPRG TEXT KEINE SENDUNG!’);
end;
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;
ExecuteCommand(‘ONAIRPRG BACKGROUNDCOLOR #00FF00’);
ExecuteCommand(‘ONAIRPRG FONTCOLOR #000000’);
ExecuteCommand(‘ONAIRPRG TEXT KEINE SENDUNG!’);
end;
begin
end.
Wenn ich das also entspechend auf die if-bedingungen reduziere, käme das dabei raus:
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 #000000’);
ExecuteCommand(‘ONAIRPRG TEXT KEINE SENDUNG!’);
end;
end;
begin
end.
Führt aber immer noch zu einem Syntax error.
Was sagt er denn dazu, der Error?
06.06.2019 15:31:43 Fehler Fehler beim Laden des Hintergrund-Scripts C:\ProgramData\mAirList\6.1\ON-AIR.mls: [Error] (9:22): Syntax error
[Error] (9:22): Syntax error
Zeile 9, Spalte 22: Es sieht so aus, als hättest Du den falschen Apostrophen/Hochkomma erwischt: ‘
und ’
statt '
. (Autokorrektur?)
Verwechselte Grüße
TSD
Steht so oben im Quelltext.
Das einleitenden und das ausleitende ist jeweils auch falsch. Ich liebe das massenersetzen in Notebad++.
Nun hängt es bei der else if. "Identifier Expected"
Vor dem else if
kein Semikolon am end
. Und vor dem else
auch nicht.
Danke, genau da habe ich regelmässig Probleme. Wo gehört ein Semikolon hin und wo nicht.
Hab’s gleich bei den else blöcken auch raus genommen und nun läuft es. Danke!
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 #000000');
ExecuteCommand('ONAIRPRG TEXT KEINE SENDUNG!');
end;
end;
begin
end.
Yep, kaum macht man’s richtig, geht’s! Wobei eigentlich beim vorletzten end
ein Semikolon stehen müßte.
Diese Un-Semikola kommen in den if
-Abfragen vor else
oder else if
vor (bzw. eben nicht). Kann man sich als Grundsatz merken. Bei der case
-Anweisung allerdings ist das anders. Hat wohl ein Nerd erfunden.
Verwirrte Grüße
TSD
Danke, ich habe das im vorherigen Beitrag mal aktualisiert.
Das liegt wohl daran, daß @Scrat den Code nicht als solchen gepostet hat, und schon macht unsere clevere Forensoftware das falsche draus.
K*ckautomatische Grüße
TSD
Wenn ich das jetzt mal weiter spinne und mit dem hier: Anzeige der aktiven Verbindungen des Encoders Verknüpfe…
Wie lautet der Befehl, zum auslesen ob ein Encoder eingeschaltet ist?
Also der weitere Status, den ich hier brauche.
if (Encoder.GetConnections.GetItem(0).GetState = Enabled)
Stimmt das vielleicht zufällig?
Und um’s noch etwas weiter zu treiben, würde ich gerne den Namen/ die Beschreibung lesen. Entweder das was im Konfigurationsdialog angezeigt wird oder falls im Erweiterten Tab unter Benutzerdefinierter Bezeichnung etwas eingetragen ist, dann das.
Ich habe das hier entdeckt:
Encoder.GetConnections.GetItem(1).GetEnabled = true
Gefundene Grüße
TSD
Danke! Wald, Bäume und so… Hätte ich eigentlich auch selber drauf kommen müssen.
Da hätten wir dann schon mal sowas:
{
Zwischen die geschweiften Klammern kann der Spickzettel hin, z.B.:
1: SWR, 2: HR, 3: RIAS.
4: NDR, 5: RB; 6: ORF
usw.
}
const
iMax = 4; // Hier die maximale Senderanzahl minus 1 einsetzen
var
i: integer;
procedure OnLoad;
begin
EnableTimer(100);
end;
procedure OnTimer;
begin
for i := 0 to iMax do
begin
if (Encoder.GetConnections.GetItem(i).GetEnabled = true) then begin
if (Encoder.GetConnections.GetItem(i).GetState = ecsConnected) then begin
ExecuteCommand('ENCODER'+ IntToStr(i) +' TEXT ON AIR');
ExecuteCommand('ENCODER'+ IntToStr(i) +' BACKGROUNDCOLOR #FF0000');
ExecuteCommand('ENCODER'+ IntToStr(i) +' FONTCOLOR #FFFFFF');
end
else if (Encoder.GetConnections.GetItem(i).GetState = ecsConnecting) then begin
ExecuteCommand('ENCODER'+ IntToStr(i) +' TEXT !OFF AIR!');
ExecuteCommand('ENCODER'+ IntToStr(i) +' FONTCOLOR #FFFFFF');
ExecuteCommand('ENCODER'+ IntToStr(i) +' BACKGROUNDCOLOR #FF0000');
Sleep(1000);
end
else begin
ExecuteCommand('ENCODER'+ IntToStr(i) +' BACKGROUNDCOLOR #00FF00');
ExecuteCommand('ENCODER'+ IntToStr(i) +' FONTCOLOR #000000');
ExecuteCommand('ENCODER'+ IntToStr(i) +' TEXT READY!');
end
end
else begin
ExecuteCommand('ENCODER'+ IntToStr(i) +' BACKGROUNDCOLOR #F0F0F0');
ExecuteCommand('ENCODER'+ IntToStr(i) +' FONTCOLOR #000000');
ExecuteCommand('ENCODER'+ IntToStr(i) +' TEXT AUS');
end;
end;
end;
begin
end.
Man bemerke, ich habe 5 Textobjekte mit den Namen ENCODER0 bis ENCODER4 anlgelgt, nicht mehr ONAIRPRG, wie im Beispiel von @Myka.
EDIT: Sieht dann erst mal so aus: