Um den PC_DIMMER mit Funktionen zu erweitern kann man eigene Plugins entwickeln. Man kann folgende Beispielprojekte mit Sourcecode verwenden, um eigene Plugins zu entwickeln:

 

Plugins


  1. Delphi7 Beispiel für Ausgabeplugin (aktualisiert am 24.06.2012)
  2. Delphi7 Beispiel für Programmplugin (aktualisiert am 24.06.2012)
  3. C++ Beispiel für Ausgabeplugin (VisualStudio2005) (aktualisiert am 24.06.2012)
  4. C++ Beispiel für Programmplugin (VisualStudio2005) (aktualisiert am 24.06.2012)

 

Weitere Infos zum Entwickeln eigener Plugins findet man im PC_DIMMER-Wiki: Pluginentwicklung

 

Ausgabe- und Programmplugins besitzen im Prinzip die gleiche Pluginsstruktur, werden jedoch in der Oberfläche anders dargestellt. Es genügt in der Funktion "DLLIdentify" zwischen "Output" und "Input" zu wechseln, um das Plugin entweder in der Interfacelist oder dem Pluginmenü im Hauptmenü des Programmes anzuzeigen.

Die Funktionen DLLAbout und DLLConfigure werden zudem nur bei Ausgabeplugins unterstützt. Statt DLLConfigure muss bei Programmplugins die Funktion DLLShow verwendet werden, um das Plugin bei einem Klick auf den Menüpunkt anzuzeigen.

 

Zum einfachen Testen von eigenen Plugins wird mit dem PC_DIMMER im Installationsverzeichnis ein Plugintester mitgeliefert. Man kann seine eigenen DLLs einfach auf die EXE-Datei per Drag&Drop ziehen und das Plugin wird entsprechend ausgeführt.

 

 

 

Zu exportierende Funktionen:

procedure DLLCreate(CallbackSetDLLValues,CallbackSetDLLValueEvent,CallbackSetDLLNames,
CallbackGetDLLValue,CallbackSendMessage:Pointer);stdcall;

Diese Funktion wird beim Aktivieren des Plugins aufgerufen. Dabei werden Pointer für Callbackfunktionen mitgeliefert. Möchte man diese Funktionen verwenden, um Daten zum PC_DIMMER zu senden (z.B. DMX-In Daten) dann kann man sich die Pointer auf seine Funktionsprototypen zuweisen. Die Callbackfunktionen sind weiter unten beschrieben.

 

procedure DLLStart;stdcall;

Diese Funktion wird nach dem DLLCreate(...) aufgerufen. Man kann hier Timer starten oder sonstige Aktionen beginnen. Erzeugen und Starten von Objekten/Ereignissen ist somit getrennt.

 

function DLLDestroy:boolean;stdcall;

Wird beim Deaktiveren des Plugins aufgerufen. Es sollten alle Objekte und Instanzen beendet werden, die bei DLLCreate(...) erzeugt wurden.

 

function DLLIdentify:PChar;stdcall;

Hier wird dem PC_DIMMER lediglich mitgeteilt, ob das Plugin ein Ausgabeplugin (result='Output'), oder ein Programmplugin (result='Input') ist. Ist ein wenig Umständlich, aber so konnte ich damals nur programmieren :)

 

function DLLGetName:PChar;stdcall;

Hier wird der Name des Plugins übergeben

 

function DLLGetVersion:PChar;stdcall;

Hier wird die Version des Plugins übergeben - wird aber nicht wirklich ausgewertet

 

function DLLGetResourceData(const ResName: PChar; Buffer: Pointer; var Length: Integer):boolean;stdcall;

Gibt die vom Hauptprogramm angeforderte Resource "ResName" über "Buffer" zurück. "Buffer" ist hierbei vom Hauptprogramm über die zuvor aufgerufene Funktion DLLGetResourceSize() entsprechend in der Größe dimensioniert. Diese Funktion ist OPTIONAL!

 

function DLLGetResourceSize(const ResName: PChar): Integer; stdcall;

Gibt dem Hauptprogramm die Größe der Resource zurück, damit "Buffer" in der Funktion DLLGetResourceData() entsprechend dimensioniert werden kann. Diese Funktion ist OPTIONAL!

Derzeit wird die Funktion lediglich für das Übertragen eines PNG-Icons für Programm-Plugins verwendet. Die hierbei angeforderte Resource heißt "PNGICON". "Buffer" sollte somit mit einem PNG-Icon der zuvor übertragenen Länge sein.

 

procedure DLLConfigure;stdcall;

Wird aufgerufen, wenn man in den erweiterten Einstellungen auf "Konfigurieren" klickt

 

procedure DLLAbout;stdcall;

Wird aufgerufen, wenn man in den erweiterten Einstellungen auf "Infos" klickt

 

procedure DLLSendData(address, startvalue, endvalue, fadetime:integer;name:PChar);stdcall;

Wird z.B. beim Start einer Szene aufgerufen

 

function DLLIsSending:boolean;stdcall;

Um Feedbackschleifen zwischen DMX-In und DMX-Out zu verhindern, muss das Plugin ein IsSending=true senden, bevor es einen Wert an das Hauptprogramm schickt.

 

procedure DLLSendMessage(MSG:Byte; Data1, Data2:Variant);stdcall;

Wird z.B. bei jeder Kanalwertänderung aufgerufen. Zusätzlich wird die Funktion aufgerufen, wenn z.B. ein neues Projekt angelegt wird und viele andere Ereignisse. MSG gibt die Art der Nachricht an (siehe Wiki-Artikel: Nachrichtensystem). Data1 und Data2 beinhalten Daten, wie z.B. Kanaladresse und Kanalwert.

 

 

 

Callback-Funktionen:

CallbackSetDLLValues= procedure(address,startvalue,endvalue,fadetime,delay:integer);stdcall;

Hiermit kann man einen Wert an den PC_DIMMER senden. BEi Fadezeit>0 wird entsprechend eingeblendet, bei Delay>0 der Befehl entsprechend später ausgeführt.

 

CallbackSetDLLValueEvent= procedure(address,endvalue:integer);stdcall;

Hiermit kann man einen Wert in die Data-In-Steuerung senden. Vor allem für DMX-In-Daten gedacht.

 

CallbackSetDLLNames= procedure(address:integer;channelname:PChar);stdcall;

Hier kann man einen Kanalnamen ändern. Diese Funktion hat keinen größeren Sinn mehr in neueren PC_DIMMER-Versionen

 

CallbackGetDLLValue= function(address:integer):integer;stdcall;

Hier kann man einen Kanalwert des PC_DIMMERs abfragen.

 

CallbackSendMessage= procedure(MSG: Byte; Data1, Data2:Variant);stdcall;

Entsprechend des Nachrichtensystems (siehe Wiki-Artikel: Nachrichtensystem) kann man eigene Nachrichten senden, um z.B. einen neuen Szenentyp zu erstellen, eine Szene zu öffnen, ein neues Projekt zu erstellen, etc.

 

 

Tipps und generelle Hinweise zu Plugins

Automatisches Anzeigen von Programmplugins

Programm-Plugins können nach dem Start des PC_DIMMERs automatisch angezeigt werden lassen. Dies ist dann sinnvoll, wenn das Plugin beim Beenden des PC_DIMMERs noch geöffnet war und es somit beim nächsten Start wieder angezeigt werden soll:

In der Windows-Registry muss hierzu im Schlüssel HKCU/Software/PHOENIXstudios/PC_DIMMER/PLUGINDATEINAME.DLL/ ein Bool-Wert mit der Bezeichnung "Showing Plugin" platziert werden. Ist der Wert "True", wird das Plugin beim Start des PC_DIMMERs automatisch mit angezeigt - falls "False" dann nicht.

Im Event DLLDestroy() sollte hierfür vor dem automatischen Beenden der Oberfläche geprüft werden, ob diese angezeigt wird und der Wert entsprechend abgespeichert werden. Beim nächsten Laden des PC_DIMMERs wird der Rest vom Hauptprogramm übernommen.