Anzeige der aktiven Verbindungen des Encoders

Hallo Ihr,
ich bin nunmehr in der “6er-Welt” angekommen - gut so.
Ich habe in meinem Encoder (je nach Sendung) bis zu 10 verschiedene Stationen.
Nun würde ich mir gerne eine Anzeige bauen, in welcher alle Stationen angezeigt werden, die “enabled” sind.
Ich habe mich ziemlich umfassend auch durch Annas Tutorial geschlagen, aber ich möchte hier keine anklickbaren Buttons sondern lediglich eine “Statusanzeige”. Die (De-) Aktivierung einzelner Stationen erfolgt evetn-gesteuert über verschiedene Scripte - ich möchte anshcließen halt nur sofort sehen, welche gerade aktiviert sind. Insofern finde ich da noch nicht den richtigen Ansatz …
Habt Ihr eine Idee für mich?
(Ja, ich weiß, dass ich mit Doppelklick auf die Anzeige das Encoder-Menü öffnen kann - aber ich möchte mir das - sofern machbar - als Bildschirmobjekt einbinden.)
Sonnige Grüße aus der Nordheide.

Hallo Tom,

Du kannst Dir Bildschirmelemente als Button definieren und mit ON, OFF, ENABLE, DISABLE usw. steuern. In diesem Artikel habe ich neben anderem Schaltzauber auch Buttons erwähnt. Der Trick ist, eine Variable einzuführen, die sich den Zustand der einzelnen Verbindungen gewissermaßen „merkt“ und den Button danach steuert. Lies es Dir mal durch, vielleicht kommst Du dann ja schon klar.

Geschaltete Grüße

TSD

1 Like

Auf die Idee bin ich beim Lesen auch gekommen. Was ich aber glaube ist, das er ein statusfenster möchte in denen alle Encoder drin sind wie man es noch vom SAM kennt.
Das wäre schwierig umzusetzen.
Außer Torben programmiert mal solch ein Element im Browser das man hinzufügen kann :yum:

Kann man sich doch mit GUI-Elementen basteln. Ich kopiere mal das Beispiel aus Toms anderem Fred, hier noch vermurkst mit dem Beitrag über Zählvariablen:

var
 i: integer;

begin
for i := 0 to 15 do
  begin
    Encoder.GetConnections.GetItem(i).SetEnabled(true);   // Erstmal alles löschen, …
    ExecuteCommand('BUTTON.' + IntToStr(i) + ' OFF');         // … auch alle Buttons
  end;

  Encoder.GetConnections.GetItem(1).SetEnabled(false);    // Und hier einen bestimmten wiedereinschalten
  ExecuteCommand('BUTTON.1 ON');
end;

Wenn das alles sein soll, könnte man sich die Zustandsvariable auch sparen (wie hier gezeigt), die brauchst Du nur, wenn Du davon abhängig noch weitere Bedingungen formulieren möchtest. Die Buttons heißen BUTTON.1 usw., deren jeweiliger Text heißt dann SWR, BR, NDR … (Über ON, OFF, true, false usw. muß Thomas selber hirnen, ich blicke da nicht tief genug in seine Syntax.)

Anregende Grüße

TSD


Nachtrag:

Gibt es da ein Beispielbildchen?


Edit: Pluszeichen nachgetragen

1 Like

Hi Tom,
ob es so etwas im SAM gibt/gab - keine Ahnung.
Es soll halt ein kleines Fenster in meiner „On Ain Control“ werden, wo nur die Sender drinstehen, die aktuell im Encoder angehakt sind.
Da ich aber in der laufenden Eventplanung mittels Scripten immer wieder die Stationen ändere, müsst das nicht nur einmal ausgelesen werden, sondern laufend …
TSD hat ja eines der Scripte hier verlinkt. In der neuen angezeigten Liste möchte ich also alle Sender haben, die „enabled=true“ haben. Oder alternativ alle mit farblicher Markierung (z.B. grün wenn true, rot wenn false).
Ich werde mal weiterlesen und hier berichten …

1 Like

Damit nix passiert, machst Du alle Buttons am Anfang aller Skripte DISABLE. Damit kann keiner mehr draufklicken. Ob sie rot oder grün werden, legst Du bei der Buttondefinition fest. (Active, Active and disabled [!] usw.) Die Ansteuerung erfolgt halt durch das Skript.

Farbige Grüße

TSD

1 Like

Ich glaube, dass ich es im Ansatz verstehe, TSD.
Aber ist es dann nicht so, dass dann der „Stationsstatus“ für diese Button nur einmal einmal ausgelesen wird? Dann müsste ich dieses Script vermutlich jedesmal in mein Event mit hineinpacken, wo die Encoder umgestellt werden (sprich: On Air Stationen ändern sich), oder?
Aus dem Kopf aufsteigende rauchige Grüße, Tom.

Das mag daran liegen, daß ich noch nicht so ganz verstehe, wie Deine Steuerung im einzelnen abläuft. Ist es so, daß Du für jeden dieser Streams ein Skript hast, welches mittels Eventsteuerung zum richtigen Zeitpunkt einen Stream verbindet und allen anderen den Stecker zieht? War das Skript, welches Du im anderen Thread gepostet hast, komplett oder nur ein Ausschnitt? Schaltet das Event „direkt“ um oder läßt es ein .mls-Skript loslaufen?

Dir schwebt offenbar eine Abfrage vor, die ständig danach schaut, welcher Stream gerade on air ist. Wenn die Buttons mittels genau dieses Umschaltskripts geschaltet würden, kannst Du Dir das sparen, dann ist das halt eine Zeile mehr im Skript.

Wenn Du die Einzelheiten nicht komplett posten magst, dann lasse sie mir gerne privat zugehen (bei Zustimmung schreibe ich Dir eine PN), die Diskussion darüber würden wir allerdings öffentlich führen, damit alle was davon haben.

Vermutende Grüße

TSD

Moin TSD.
Das Script aus dem anderen Beitrag war komplett und ist eine .mls.
Pro Tag streame ich unterschiedliche Sendungen, die an verschiedene Stationen gesendet werden.
Über die Eventsteuerung schalte ich am Anfang einer Sendung per Script dann die richtigen Sender (immer komplett aktuell 17 Einträge), in dem ich sie auf „true“ oder „false“ setzen lasse.

Eigentlich ja, genauso wäre es schön.
Bin jetzt unterwegs und könnte Dir gerne am Abend eine aktuelle .mls senden. Aber die aus dem Post passt schon. Mehr steht da nicht drin.

Gespannte Grüße, Tom

Anna hat das schon gut beschrieben, bei mir war’s vielleicht zuviel auf einmal.

begin

Ich nehme Dein gepostetes Skript von nebenan her. Also:

  • Für jeden Stream einen Erweiterten Button erstellen.

    • Standard-Text: Der entsprechende Sendername

    • Umschalt-Button: Ja

    • Sonst nichts anhaken

    • Farben (wäre jetzt mein ergonomisch grandios ausgefuchster Vorschlag):

      • Inaktiv: grau
      • Maus: grau
      • Aktiv: rot
      • Aktiv + Maus: rot
      • gesperrt: grau
      • Gesperrt + aktiv: rot
    • Aktionen: Nichts eintragen

    • ID für Fernsteuerung: BUTTON.0, BUTTON.1 usw., jeweils passend zum Encoder

  • Vielleicht mittels eines Statischen Textes (kein Text, nur Hintergrundfarbe) einen passsenden Rahmen setzen

  • Das ganze im Layout-Editor hübsch anordnen

  • Jetzt Dein aufgebohrtes Skript:

    begin
    Encoder.GetConnections.GetItem(0).SetEnabled(false);
    ExecuteCommand('BUTTON.0 OFF');
    Encoder.GetConnections.GetItem(1).SetEnabled(true);
    ExecuteCommand('BUTTON.1 ON');
    Encoder.GetConnections.GetItem(2).SetEnabled(true);
    ExecuteCommand('BUTTON.2 ON');
    Encoder.GetConnections.GetItem(3).SetEnabled(true);
    ExecuteCommand('BUTTON.3 ON');
    Encoder.GetConnections.GetItem(4).SetEnabled(true);
    ExecuteCommand('BUTTON.4 ON');
    Encoder.GetConnections.GetItem(5).SetEnabled(true);
    ExecuteCommand('BUTTON.5 ON');
    Encoder.GetConnections.GetItem(6).SetEnabled(true);
    ExecuteCommand('BUTTON.6 ON');
    Encoder.GetConnections.GetItem(7).SetEnabled(true);
    ExecuteCommand('BUTTON.7 ON');
    Encoder.GetConnections.GetItem(8).SetEnabled(true);
    ExecuteCommand('BUTTON.8 ON');
    Encoder.GetConnections.GetItem(9).SetEnabled(true);
    ExecuteCommand('BUTTON.9 ON');
    Encoder.GetConnections.GetItem(10).SetEnabled(true);
    ExecuteCommand('BUTTON.10 ON');
    Encoder.GetConnections.GetItem(11).SetEnabled(true);
    ExecuteCommand('BUTTON.11 ON');
    Encoder.GetConnections.GetItem(12).SetEnabled(true);
    ExecuteCommand('BUTTON.12 ON');
    Encoder.GetConnections.GetItem(13).SetEnabled(true);
    ExecuteCommand('BUTTON.13 ON');
    Encoder.GetConnections.GetItem(14).SetEnabled(true);
    ExecuteCommand('BUTTON.14 ON');
    Encoder.GetConnections.GetItem(15).SetEnabled(true);
    ExecuteCommand('BUTTON.15 ON');
    end.
    

    Also wenn true, dann Button ON, und umgekehrt.

  • Wie man das ganze skriptmäßig etwas vereinfachen könnte, kriegen wir später. (Dazu Frage: Hier sieht es so aus, daß mehrere Streams gleichzeitig aktiv sein können. Ist das so? Dann ist mein vereinfachtes Skript aus #4 zu einfach.)

end.

TSD

Hi TSD.

Das sieht für mein logisches Verständnis absolut nachvollziehbar aus.
Ausprobieren konnte ich es noch nicht.
Und ja - es sind bis zu 15 Stationen gleichzeitig On Air.
Da lag vermutlich auch meine Gedankenblockade beim vereinfachten Script-Vorschlag. Da es keine „Entweder-Oder-Verknüpfung“ gibt, fehlte mir komplett „der Griff an der Sache“.
Ich probiere das später mal durch.

Griffiger Gruß aus der Nordheide, Tom

Aha. Und ich dachte, es würde jeweils nur ein einziger Sender aufgeschaltet. Jedenfalls solange, bis ich Dein Skript nochmal im ganzen vermuggelt hatte.

Betriebsblinde Grüße

TSD

1 Like

Na, woher solltest Du das auch wissen? Glaskugel in der Spülmaschine?
Ich schau später mal im Ansatz nach Deiner Idee, glaube aber, dadurch auf der richtigen Spur zu sein…

Pfadfinder-Güße, Tom. :man_farmer:

Also:
Das klappt in der Tat so, wie von TSD beschrieben.
Screenshots und Scripte folgen noch.
Danke für die Ideen und das Brainstorming dazu.
Stürmische Grüße, Tom

Gibt es da ein Beispielbildchen?

Das war im Prinzip nur eine Text Liste.
Leider finde ich dazu keine Bilder mehr.

So, dann gibt es hier den versprochen Screenshot vom rechten Drittel meines ML-Bildschirms.


Das Script habe ich wie von TSD beschrieben umgesetzt.
Allerdings habe ich die BUTTON.0, BUTTON1 usw. so formatiert, dass ein “X” oder “Haken” erscheint und habe die jeweilige Station einfach mittels “Statischen Text” dazugeschrieben.
Vielen Dank für die Hilfe an TSD - ohne Dich hätte ich das nicht hinbekommen.
Dankbare Grüße, Tom

Funktioniert also, prima. Ich hatte aber oben noch eine Vereinfachung angedroht, hier kommt sie:

{
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 = 15;                // Hier die maximale Senderanzahl minus 1 einsetzen

var
  i: integer;
  Stream: array[0 .. iMax] of boolean;
  Button: array[0 .. iMax] of string;

begin
 for i := 0 to iMax do
  case i of
  1, 5, 8..12, 14 :         // Hier aufzuschaltende Sender durch Kommata getrennt eintragen
    begin
      Stream[i] := true;
      Button[i] := ' ON';
    end;
  else
    begin
      Stream[i] := false;
      Button[i] := ' OFF';
    end;
  end;

for i := 0 to iMax do
  begin 
    Encoder.GetConnections.GetItem(i).SetEnabled(Stream[i]);
    ExecuteCommand('BUTTON.' + IntToStr(i) + Button[i]);
  end;

end.

Sieht zunächst komplizierter aus, ist es aber gar nicht. Die Erklärung, was die Zeilen im einzelnen bewirken, findet Ihr im Thread über Zählvariablen. Bis auf die Zeile mit dem Encoder (ich habe bisher nämlich keinen) habe ich das ausprobiert, das Skript sollte also laufen. Die Vereinfachung liegt darin, daß man jetzt nicht mehr dutzende Zeilen mit true, false, ON und OFF versehen muß, sondern lediglich die Nummern der Streams, die aufgeschaltet werden sollen, in die entsprechende Zeile einträgt. (Und noch die Gesamtzahl der Streams iMax, minus eins, da nullbasiert.)

Vielleicht magst Du das ja mal ausprobieren, Thomas.

Komprimierte Grüße

TSD


Nachtrag: Torben hat zur weiteren Abspeckung beigetragen, hier zu sehen.

Klasse und nachvollziehbar.
Werde ich mir vielleicht am Wochenende mal anschauen.
Danke für die Weiterentwicklung.

Weiterentwickelte Grüße, Tom