Talktimer blinken lassen

Hallo Tondose,

Danke für Deine Antwort, nur bin ich glaube zu dumm mit dem Script bzw. weis nicht ob ich überhaupt das richtige gefunden hatte.

https://community.mairlist.com/t/button-blinken/9916

Hier bin ich genau nach Anleitung gegangen, das Objekt wird auch erstellt wechselt allerdings nur die Farbe beim anklicken, aber das ist es ja nicht, vielleicht stehe ich da zu sehr auf dem Schlauch oder habe ein Denkfehler.
Das Textfeld mit dem Hinweis TALKTIME OVER wenn der Talktimer die Zeit von 1.30 Minuten erreicht hat wäre definitiv okay bzw. das ist mein Ziel, falls möglich.
Schon mal vorab, sorry für die Laienhafte Ausdrucksweise :slight_smile:

Erstelle einen GUI-Element als statischen Text mit der ID für Fernsteuerung BUTTON.TALK. Registriere folgendes Hintergrund-Skript:

const
  TALK_TIME = 90;                // Zeit in Sekunden bis zur Warnung

  BUTTON_NAME = 'BUTTON.TALK';   // Name des statischen Textes

  BCOLOR_ON  = '#FF0000';        // Hintergrundfarbe "an"
  BCOLOR_OFF = '#8A0808';        // Hintergrundfarbe "aus"
  FCOLOR_ON  = '#F7F8E0';        // Schriftfarbe "an"
  FCOLOR_OFF = '#848484';        // Schriftfarbe "aus"
      
var
  TalktimerOn, ButtonStatus: boolean;
  
procedure ButtonOn;
begin
  ExecuteCommand(BUTTON_NAME + ' FONTCOLOR ' + FCOLOR_ON);
  ExecuteCommand(BUTTON_NAME + ' BACKGROUNDCOLOR ' + BCOLOR_ON);
  ButtonStatus := true;
end;

procedure ButtonOff;
begin
  ExecuteCommand(BUTTON_NAME + ' FONTCOLOR ' + FCOLOR_OFF);
  ExecuteCommand(BUTTON_NAME + ' BACKGROUNDCOLOR ' + BCOLOR_OFF);
  ButtonStatus := false;
end;

procedure ButtonFlash;
begin
  EnableTimerEx('Flash', 750);
end;

procedure ButtonStop;
begin
  DisableTimerEx('Flash');
  ButtonOff;
end;

procedure OnLoad;
begin
  TalktimerOn := false;
  ButtonOff;
end;

procedure OnTimerEx(ID: string);
begin
  if ID = 'Time' then
  begin
    ButtonFlash;
    DisableTimerEx('Time');
  end;
  if ID = 'Flash' then
  begin
    if ButtonStatus then
      ButtonOff
    else
      ButtonOn;
  end;
end;

procedure OnExecuteCommand(Command: string);
begin
  if (copy (Command, 1, 15)  = 'TALKTIMER START')
    AND NOT TalktimerOn then
  begin
    if TALK_TIME > 0 then
    begin
      TalktimerOn := true;
      EnableTimerEx('Time', TALK_TIME * 1000);
    end;
  end
  else if ((copy (Command, 1, 15)  = 'TALKTIMER START')
    OR (Command = 'TALKTIMER STOP'))
    AND TalktimerOn then
  begin
    TalktimerOn := false;
    ButtonStop;
  end;
end;

begin
end.

Der Button fängt 90 Sekunden nach Start des Talktimers an zu blinken.

Erinnerte Grüße

TSD

1 Like

Hallo werter Tondose :slight_smile:

Herzlichen Dank erstmal für Deine Mühe mir dabei zu helfen.

Auch wenn ich die Programiersprache nicht wirklich verstehe, Hut ab vor dem was Du da gezaubert hast, es funktioniert grundlegend schon mal sehr gut, habe mir die Farben etc angepasst, das verstehe sogar ich und ist kein Thema.
Allerdings fiel mir dann auf das wenn der Talktimer weniger als 90 Sekunden active ist oder gestoppt wird dass das Script weiterläuft bzw. wieder sofort von vorne beginnt auf 90 Sekunden zu zählen und dann unabhängig davon ob der Talktimer wieder aktiv wird oder nicht wie ursprünglich gewünscht nach 90 Sekunden zu blinken beginnt, heist also das Script hält nicht an wenn der Talktimer stoppt.

Wo und wie müsste ich da ggf. nachbessern?

Gruß MrBeat

Ist bei mir nicht der Fall. Mit welchen Befehlen steuerst Du den Timer?

Guten Tag @Tondose,

ich habe das Script auch einmal eingebunden, denn ich finde die Anwendung auf den Talktimer sehr interessant.

Ich bekomme allerdings einen Fehler in Zeile 30 und ich weiss nicht warum.

Talktimer Script Error_1

Ich habe jetzt einige Stunden gesessen und getestet um den Fehler zu finden, aber ich bekomme immer wieder für die gleiche Zeile einen Fehler angezeigt. Für mich sieht das alles logisch aus. Wo hat sich der Fehlerteufel versteckt?

Ich habe bei einem bereits bestehendem statischem Text die ID eingetragen. Nach dem Fehler habe ich dann einen neuen statischen Text mit der ID erstellt, aber selber Fehler.
Dann habe ich es mit einer anderen ID probiert und diese dann in Deinem Script natürlich angepasst. Selbiges Problem. Dann dachte ich, daß sich eventuell Scripte bei mir miteinander bei dem String “Flash” beißen, aber da habe ich auch nichts gefunden.

@Tondose hast Du eine Idee, wo ich ansetzen kann?

Nachmittagliche Grüße
Nick

Hallo,

ich steuere den über die Tastatur an (siehe den ersten Screen weiter oben)(ZIRKUMFLEX = Taste unter Esc und links neben der 1). Das heist wenn ich den Mic-Button drücke beginnt der Talktimer ebenfalls zu zählen incl. des Scriptes für den 90 Sekunden Timer, beim ersten mal funktioniert das auch, wenn ich die Taste abermals drücke beginnt der wieder von vorne zu zählen anstatt zu stoppen wenn der Mic Button auf OFF steht.


Habe alles so eingerichtet bzw. kopiert. Hier nochmal der Code wo ich lediglich die Buttonfarben angepasst habe und ein paar Screens:

const
  TALK_TIME = 90;                // Zeit in Sekunden bis zur Warnung

  BUTTON_NAME = 'BUTTON.TALK';   // Name des statischen Textes

  BCOLOR_ON  = '#202020';        // Hintergrundfarbe "an"
  BCOLOR_OFF = '#202020';        // Hintergrundfarbe "aus"
  FCOLOR_ON  = '#FF0000';        // Schriftfarbe "an"
  FCOLOR_OFF = '#202020';        // Schriftfarbe "aus"
  
var
  TalktimerOn, ButtonStatus: boolean;
  
procedure ButtonOn;
begin
  ExecuteCommand(BUTTON_NAME + ' FONTCOLOR ' + FCOLOR_ON);
  ExecuteCommand(BUTTON_NAME + ' BACKGROUNDCOLOR ' + BCOLOR_ON);
  ButtonStatus := true;
end;

procedure ButtonOff;
begin
  ExecuteCommand(BUTTON_NAME + ' FONTCOLOR ' + FCOLOR_OFF);
  ExecuteCommand(BUTTON_NAME + ' BACKGROUNDCOLOR ' + BCOLOR_OFF);
  ButtonStatus := false;
end;

procedure ButtonFlash;
begin
  EnableTimerEx('Flash', 750);
end;

procedure ButtonStop;
begin
  DisableTimerEx('Flash');
  ButtonOff;
end;

procedure OnLoad;
begin
  TalktimerOn := false;
  ButtonOff;
end;

procedure OnTimerEx(ID: string);
begin
  if ID = 'Time' then
  begin
    ButtonFlash;
    DisableTimerEx('Time');
  end;
  if ID = 'Flash' then
  begin
    if ButtonStatus then
      ButtonOff
    else
      ButtonOn;
  end;
end;

procedure OnExecuteCommand(Command: string);
begin
  if (copy (Command, 1, 15)  = 'TALKTIMER START')
    AND NOT TalktimerOn then
  begin
    if TALK_TIME > 0 then
    begin
      TalktimerOn := true;
      EnableTimerEx('Time', TALK_TIME * 1000);
    end;
  end
 else if ((copy (Command, 1, 15)  = 'TALKTIMER START')
    OR (Command = 'TALKTIMER STOP'))
    AND TalktimerOn then
  begin
    TalktimerOn := false;
    ButtonStop;
  end;
end;

begin
end.

Button_01

speicher_01

Statisch_01

Statisch_02

Talktimer_01

Ich wollte es gerade noch ändern Ulli… :slight_smile: Diesmal warst Du schneller

1 Like

EDIT by Moderator: Code angepasst für bessere Lesbarkeit.

:bulb: Apropos Lesbarkeit: Man kann die Screenshots gerne auch auf 50% innerhalb des Editors reduzieren lassen. Sie lassen sich durch Mausklick in voller Pracht anzeigen.

Danke für den Tipp, muss mich auch hier erstmal mit den Schaltflächen vertraut machen, hab auch das angepasst. Ich werd noch ein Profi in Sachen Forumpostings.
Schönes Wochenende Euch und Danke sehr :+1:

Kein Thema. Habe gerade noch etwas editiert. Manche Pics sind so klein (Dateigröße), die lassen sich nicht einzoomen, warum auch immer. Ich habe jetzt mal einen Kompromiss reingebastelt und alles ein wenig entzerrt. :wink:

1 Like

Hallo Nick,

die Prozedur funktioniert erst ab V 6.2.

Eingeschränkte Grüße

TSD

Schön. Und welche Befehle gibt die Tastatur an mAirList weiter? Ich brauche das, was unter Fernsteuerung in der Konfiguration/Systemsteuerung steht und Mikrofon und Talktimer betrifft.

Hallo @Tondose,

ich verwende den aktuellsten Snapshot v6.3.8 Build 4403. Sorry ich vergaß das mit anzugeben.

Nachmittagliche Grüße
Nick

Hast Du das Skript als Hintergrundskript installiert oder mit Script ausführen… gestartet?

Hallo @Tondose,

ich lasse es als Hintergrundscript laufen. Sobald ich dann Mairlist starte kommt der Fehler. Ich habe auch probiert das Script einzeln zu starten, selbiger Fehler.

Nachmittagliche Grüße
Nick

Das steht ganz oben ja. Ich Blindfisch.

@MrBeat: Funktioniert es, wenn Du die beiden Befehle der Zirkumflex-Taste umdrehst, also

TALKTIMER ON/OFF; ENCODER INPUT MIC ON/OFF

…?

Der talktimer reagiert nicht auf ON/OFF sondern nur auf START/STOP aber auch wenn ich auf
TALKTIMER START/STOP; ENCODER INPUT MIC ON/OFF
umstelle funktioniet es nicht korrekt, wie gesagt der Timer wird zwar wieder auf 0.00 gesetzt und die Anzeige erlischt wie gewünscht, das Script zählt wohl dennoch weiter.

Jetzt lasse bitte TALKTIMER ON/OFF; bei der Zirkumflex-Taste weg und probiere folgendes Skript aus:

const
  TALK_TIME = 90;                // Zeit in Sekunden bis zur Warnung

  BUTTON_NAME = 'BUTTON.TALK';   // Name des statischen Textes

  BCOLOR_ON  = '#FF0000';        // Hintergrundfarbe "an"
  BCOLOR_OFF = '#8A0808';        // Hintergrundfarbe "aus"
  FCOLOR_ON  = '#F7F8E0';        // Schriftfarbe "an"
  FCOLOR_OFF = '#848484';        // Schriftfarbe "aus"
      
var
  TalktimerOn, ButtonStatus: boolean;
  
procedure ButtonOn;
begin
  ExecuteCommand(BUTTON_NAME + ' FONTCOLOR ' + FCOLOR_ON);
  ExecuteCommand(BUTTON_NAME + ' BACKGROUNDCOLOR ' + BCOLOR_ON);
  ButtonStatus := true;
end;

procedure ButtonOff;
begin
  ExecuteCommand(BUTTON_NAME + ' FONTCOLOR ' + FCOLOR_OFF);
  ExecuteCommand(BUTTON_NAME + ' BACKGROUNDCOLOR ' + BCOLOR_OFF);
  ButtonStatus := false;
end;

procedure ButtonFlash;
begin
  EnableTimerEx('Flash', 750);
end;

procedure ButtonStop;
begin
  DisableTimerEx('Flash');
  ButtonOff;
end;

procedure OnLoad;
begin
  TalktimerOn := false;
  ButtonOff;
end;

procedure OnTimerEx(ID: string);
begin
  if ID = 'Time' then
  begin
    ButtonFlash;
    DisableTimerEx('Time');
  end;
  if ID = 'Flash' then
  begin
    if ButtonStatus then
      ButtonOff
    else
      ButtonOn;
  end;
end;

procedure OnEncoderInputToggle(Input: TEncoderInput; NewState: boolean);
begin
  if Input = eiMic then begin
    if NewState = true then
    begin
      ExecuteCommand('TALKTIMER START');
      if TALK_TIME > 0 then
        EnableTimerEx('Time', TALK_TIME * 1000);
    end
    else begin
      ExecuteCommand('TALKTIMER STOP');
      ButtonStop;
    end;
  end;
end;

begin
end.

(Die Farben mußt Du jetzt nochmal anpassen, sorry.)

Nick,

ich bin im Moment überfragt. Ich habe hier V 6.3.5 Build 4382 (wieso eigentlich?), und da funktioniert es bestens. Es klingt jetzt blöd, aber bitte schaue nochmal nach, in welcher Version Du das Skript wirklich ausprobiert hast (nach Klick auf Button ).