Talktimer blinken lassen

Hallo @Tondose,

um bei mir den Fehler einzugrenzen bin ich wie folgt vorgegangen und habe nach jedem Schritt getestet.

  1. Zusätzliche Sicherung von Mairlist komplett aus beiden Ordnern Programfiles und ProgramData.
  2. Deaktivierung aller Hintergrundskripte. Ausser das, um den Talktimer blinken zu lassen.
  3. Deaktivierung aller Aktionen nach Programmstart, wo ich ein Skript mit startete.
  4. Prüfen von vergebenen ID’s (TALKTIMER und BUTTON.TALK). Gegebenenfalls korrigieren.
  5. Anderes GUI Objekt testen mit den richtigen ID’s.
  6. Andere und ältere Mairlistversionen getestet.
  7. Frisches Mairlist als Standardkonfiguration (wie neu ohne meine Änderungen und Designanpassungen).

Als bei einer Cleaninstallation das mit dem blinkenden Button ging, habe ich diese genommen und in den Konfigurationsordner nur meine Änderungen (Konfigurationsdatei, Datenbank, ini-Dateien für Layout und Scripte) zurück kopiert.

Habe das entsprechende GUI-Objekt, was blinken sollte noch einmal neu erstellt und alles ging.

War zwar ein sehr großer Aufwand, aber das Endergebnis zählt.

Vielleicht hätte ich es gleich an einer Cleaninstallation testen sollen, aber hinterher ist man immer schlauer. :rofl:

Morgendliche Grüße
Nick

1 Like

Na, dann ans Werk, @MrBeat. Du weißt, was zu tun ist. (Backups nicht vergessen!!)

Guten Morgen zusammen,
als erstes vielen Dank an Euch für die Zahlreichen Tipps und Hilfestellungen.

BTW @NickTheRipper andere Hintergrundscripte die ggf. dazwschen funken könnten nutze ich nicht, lediglich Tastenkombis zum Steuern der Player und Cartwall, daran kanns also nicht liegen.

Ich bin dem Tipp von Nick gefolgt, habe alles gesichert, neuinstalliert und nur das Script und die dementsprechenden Bildschirmobjekte erstellt und verlinkt. Leider wieder ohne Erfolg bzw. so wie oben und mehrfach beschrieben.
Aktiviere ich den Talktimer über die Mic Taste und das Script läuft minimum oder länger als 90 Sekunden erledigt er problemlos seinen Job, ich stoppe den Talktimer über die Mic-Taste und die Meldung verschwindet. Funktioniert also in dem Punkt tadellos.
Allerdings redet man ja nicht immer genau oder länger als 90 Sekunden, für diesen Fall aktiviere ich natürlich genauso den Talktimer über den Mic-Botton und stoppe den Talktimer durch erneutes drücken der MIC-Taste innerhalb bzw. vor Ablauf der 90 Sekunden, z.B. nach 45 Sekunden, dann läuft das Script einfach weiter und gibt mir nach Ablauf der restlichen 45 Sekunden die Meldung Talktime Over

Wenn ich das Script über die Konfiguration - Hintergrundscripte einbinde nimmt das Programm das Script an, benutze ich den Script-Import über Script ausführen bekomme ich die Fehlermeldung die auch Nick hatte.

111

Getestet habe ich das mit den Versionen:

Version 6.3.6 Build 4382
Version 6.3.8 Build 4403

Ich gebs nun auf, wie gesagt es ist ein Nice to Have, kein Must Have

Nochmal Danke für Eure intensive Hilfe

Gruß MrBeat

Guten Tag @Tondose,

ich habe mal versucht das Problem von @MrBeat nachzustellen und es ist mir gelungen.
Im Skript reduzierte ich einmal die Zeit von 90 Sekunden auf 5 Sekunden. Danach aktivierte ich das Mikrofon und zog den Regler bei 3 Sekunden wieder zu. Tatsächlich beginnt dann der Button nach einigen Sekunden an zu blinken. Erreicht man Overtime (5 Sekunden) und zieht dann den Mikrofonregler runter, dann läuft alles super.

Sprich zieht man den Regler vor erreichen der angegebenen Zeit wieder nach unten, dann stoppt zwar der Talktimer, aber der Overtimebutton fängt trotzdem nach der abgelaufenen Overtime an zu blinken.

Ich habe nun schon einige Sachen versucht im Skript anzupassen, aber ich habe noch nicht das Problem beseitigen können.

Wir alle haben offenbar nur geprüft (bzw. ich), ob Overtime funktioniert und das geht ohne Probleme.

@MrBeat
Sorry, ich hatte Dich offenbar erst nicht richtig verstanden und nach Deiner letzten Beschreibung habe ich es noch einmal bei mir getestet und kann es nun auch nachvollziehen.

Mittagliche Grüße
Nick

Ich glaube, ich sehe eine Spur.

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: