Nachrichtensystem
Deutsch
Mit dem PC_DIMMER-Internen Nachrichtensystem können Plugins und Hauptprogramm Daten austauschen. Es handelt sich hier eigentlich nur um eine Funktion, welche über Variants entsprechend unterschiedliche Daten (Text, Zahlen, Pointer, etc.) verschicken kann. Über die Nachrichtennummer wird der Inhalt der beiden VARIANTs definiert.
Um eine Nachricht aus einem eigenen Plugin zum Hauptprogramm senden zu können, muss man den Pointer "CallbackSendMessage" beim Aufruf von DLLCreate(...) entsprechend einem Funktionsprototypen zuweisen, welcher zwei Funktionswerte bereitstellt: MSG als Byte, ARG1 und ARG2 jeweils als VARIANT:
SendMSG(MSG: Byte; ARG1, ARG2:VARIANT)
In Delphi könnte eine Zuweisung des Pointers zum Funktionsprototyp in der DLLCreate(...) wie folgt aussehen:
@SendMSG:=CallbackSendMessage;
Danach kann man SendMSG (also die nun zugewiesene Funktion) wie eine normale Funktion verwendet werden:
SendMSG(MSG_ADDLOGFILEENTRY,'Das Nachrichtensystem funktioniert wunderbar! :)'); // Fügt einen neuen Eintrag in die Logdatei des PC_DIMMERs ein
Hier eine Auflistung der derzeit verfügbaren Nachrichten:
// ID=String einer TGUID (z.B.: '{E627400F-BB66-40DB-B6C0-7F5FD78DE36D}')
// PC_DIMMER Messagesystem: MSG, Data1, Data2
MSG_RECORDSCENE=0; // Data1=Booleanarray
MSG_AUDIOEFFECTPLAYERRECORD=1; // Data1=Boolean
MSG_SYSTEMVOLUME=2; // Data1=Byte
MSG_SYSTEMMUTE=3; // Data1=Boolean
MSG_JUMPTOCHANNEL=4; // Data1=Integer
MSG_GRANDMASTER=5; // Data1=Byte
MSG_FLASHMASTER=6; // Data1=Byte
MSG_ADDLOGFILEENTRY=7; // Data1=String
MSG_EFFECTSPLAY=8; // Data1=Boolean
MSG_SYSTEMSPEED=9; // Data1=Integer (BPM)
MSG_NEW=10; // Data1=String (Projektverzeichnis)
MSG_OPEN=11; // Data1=String (Projektverzeichnis)
MSG_SAVE=12; // Data1=String (Projektverzeichnis)
MSG_BEATIMPULSE=13; // Data1=Boolean
MSG_ACTUALCHANNELVALUE=14; // Data1=Integer, Data2=Integer
MSG_MIDIIN=15; // Data1=array[0..2] of byte
{
Data[0]=MIDI_Message
Data[1]=MIDI_Data1
Data[2]=MIDI_Data2
}
MSG_STARTSCENE=16; // Data1=ID
MSG_STOPSCENE=17; // Data1=ID
MSG_SPEEDMASTER=18; // Data1=Byte
MSG_AUDIOEFFECTPLAYERTIMECODE=19; // Data1=Cardinal (in ms)
MSG_AUDIOEFFECTPLAYEREVENT=20; // Data1=Byte (0=Play, 1=Pause, 2=Stop)
MSG_MIDIOUT=21; // Data1=array[0..2] of byte
{
Data[0]=MIDI_Message
Data[1]=MIDI_Data1
Data[2]=MIDI_Data2
}
MSG_SETLANGUAGE=22; // Data1=Languagecode 0=English, 1=French, 3=German
MSG_OPENLIBRARY=23; // Data1=Szenen-ID (um zu bearbeitende Szene in Bibliothek zu selektieren)
MSG_LIBRARYVALUE=24; // Data1=Szenenname, Data2=Szenen-ID
MSG_CREATEPLUGINSCENE=25; // Data1=ID, Data2=Name
MSG_REFRESHPLUGINSCENE=26; // Data1=ID, Data2=Name
MSG_REMOVEPLUGINSCENE=27; // Data1=ID
MSG_STARTPLUGINSCENE=28; // Data1=ID, Data2=Fadetime (Optional)
MSG_STOPPLUGINSCENE=29; // Data1=ID
MSG_EDITPLUGINSCENE=30; // Data1=ID
MSG_REGISTERPLUGINCOMMAND=31; // Data1=ID, Data2=Name
MSG_STARTPLUGINCOMMAND=32; // Data1=ID, Data2=Wert zwischen 0 und 255
MSG_SETCOLOR=33; // Data1=ID, Data2=array[0..2] of byte (=R,G,B)
{
Data[0]=R
Data[1]=G
Data[2]=B
}
MSG_SETDIMMER=34; // Data1=ID, Data2=byte
MSG_SETSTROBE=35; // Data1=ID, Data2=byte
MSG_SETSHUTTER=36; // Data1=ID, Data2=byte (0=off, 255=on)
MSG_SETGOBOROT1=37; // Data1=ID, Data2=byte
MSG_SETGOBOROT2=38; // Data1=ID, Data2=byte
MSG_SETPRISMA=39; // Data1=ID, Data2=byte (0=Single, 255=Triple)
MSG_SETPRISMAROT=40; // Data1=ID, Data2=byte
MSG_SETIRIS=41; // Data1=ID, Data2=byte
MSG_STARTCOMMAND=42; // Data1=array[0..6] of string[38], Data2=byte (Sollwert 0..255)
{
Data[0]=ID des aufzurufenden Befehls
Data[1]=Integer-Wert 1 als String
Data[2]=Integer-Wert 2 als String
Data[3]=String-Wert 1
Data[4]=String-Wert 2
Data[5]=GUID 1 als String
Data[6]=GUID 2 als String
}
MSG_STARTEFFECT=43; // Data1=ID
MSG_STOPEFFECT=44; // Data1=ID