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