Talktimer blinken lassen

Bitte nochmals testen:

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');
      DisableTimerEx('Time');
      ButtonStop;
    end;
  end;
end;

begin
end.


Sorry for any inconvenience caused.

Hallo @Tondose,

bei mir fängt nun der Overtime garnicht mehr an zu blinken.

Mir ist auch die Zeile 63 nicht ganz schlüssig. Da will bei mir der Knoten im Kopf nicht platzen.

if Input = eiMic then begin

Mittagliche Grüße
Nick

Welches Skript hattest Du zunächst ausprobiert? Das erste, was ich gepostet hatte oder das zweite? Das zweite ist nur für Leute ohne Pult, die den Mikrofoneingang des Encoders benutzen. Das dritte ist eine Abwandlung des zweiten.

Hallo @Tondose,

okay, dann verstehe ich auch die Zeile 63 und die procedure “OnEncoderInputToggle”.
Ich hatte das aller erste Skript vom 18.12.2020 getestet.

Ich sende ja mit Mischpult.

Mittagliche Grüße
Nick

Dann speziell für Dich:

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');
      DisableTimerEx('Time');
      ButtonStop;
    end;
  end;
end;

begin
end.

1 Like

Hallo @Tondose,

ist das nicht das identische Skript von davor, denn der Button Overtime blinkt damit auch nicht?
Ich habe mal beide Skripte bei mir nebeneinander verglichen, um zu sehen was Du geändert hast und ich kann keinen Unterschied finden.

Nachmittagliche Grüße
Nick

Hallo @Tondose,

ich habe mir mal angeschaut, was Du zu Version 2 geändert hast und das dann auf das aller erste Skript (Mischpult Variante) angepaßt. Es läuft nun auch, wenn man das Mikrofon vor erreichen von Overtime herunter zieht.

Hier die von mir angepasste Variante. Vielen Dank für Deine Geduld.

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 = '#F0F0F0';        // 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;
	DisableTimerEx('Time');
    ButtonStop;
  end;
end;

begin
end.

Nachmittagliche Grüße
Nick

@NickTheRipper und @Tondose

Ihr seid so Klasse das Ihr diese Geduld und Freude aufbringt solange zu testen bis es klappt. MEGA

Aber welches der drei Scripte muss ich denn nun nehmen? Letzteres? *vermutet

Gruß MrBeat

Klar, war in Hektik, weil’s an der Tür bimmelte. Man soll sowas nur besonnen posten. Der Unterschied ist praktisch nur die Zeile

DisableTimerEx('Time');

Dieses hier (aus Nr. 42, welches eine gute Nummer ist).

Hallo @MrBeat,

wenn Du ohne Mischpult arbeitest dann das letzte von Tondose. Wenn Du mit Mischpult arbeitest, dann das letzte von mir korrigierte Skript.

Tondose ist mit Skripten super fit, da komme ich leider noch nicht hinterher, aber ich lerne immer wieder dazu und verstehe auch so einige Umsetzungen und Skripte anzupassen. Ich versuche mich da immer wieder dran. Es kann ja nichts kaputt gehen. Vor allem ist Tondose da auch immer sehr hilfsbereit und geduldig.

Fröhliches Testen :grin:

Nachmittagliche Grüße
Nick

So hab ich’s mir auch beigebracht. Mit viel Forensuche und der Seite http://www.delphibasics.co.uk.

Hallo Ihr Lieben,

es ist der Wahnsinn, es funktioniert !!!

Beide Scripte, bei @Tondose seinem Script steuere ich es ohne den Hotkey der Tastatur TALKTIMER STAR/STOP an und bei @NickTheRipper seinem mit dem genannten Hotkey über die Tastatur.

Siehe Screens:

Bild 1: Ablauf der Talktime nach 90 Sekunden
Bild 2: Beginn der Talktime für 8 Sekunden
Bild 3: Deutlich über der Zeit nach abschalten des Talktimers.


02

Für mich seid IHR die Helden 2020 und die absoluten Scriptgötter. *verneigt

Ich danke Euch viel viel viel mals für Eure Zeit, Geduld und Euer Wissen.

Schöne Weihnachten schon mal.

Herzlichst MrBeat

1 Like

Nur mal so nebenbei gefragt, und um Dich ein bißchen zu ärgern: Sind Deine Moderatoren alle englischsprachig? :grin:

Falls Du mich meinst, Nein sind sie nicht und ich mache das ja für mich und nicht für die anderen :wink: davon ab, den Button Redezeit vorbei oder Sprechzeit überschritten zu nennen ist auch doof. :rofl:

Warum? :thinking:  

ich finde es so besser, auch wenn Du mich grade bisschen aufziehst bleibst trotzdem der Scriptgott. :grinning:

Danke Dir nochmal

1 Like

Und ich finde Deine Reaktion klasse. :grin: