Entwicklung PDF Drucken E-Mail

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. C++ Beispiel für Ausgabeplugin (VisualStudio2005)
  2. Delphi7 Beispiel für Ausgabeplugin
  3. Delphi7 Beispiel für Programmplugin

 

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 einfacheren Testen von eigenen Plugins stelle ich hier ein kleines Testprogramm zur Verfügung. Es lädt ein Plugin und reagiert auf die entsprechenden Callbackfunktionen: PC_DIMMER2010 Plugintester

 

 

 

Zu exportierende Funktionen:

procedure DLLActivate(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.

 

function DLLDeactivate:boolean;stdcall;

Wird beim deaktiveren des Plugins aufgerufen.

 

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

 

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 messagesystem.pas). 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 der messagesystem.pas kann man eigene Nachrichten senden, um z.B. einen neuen Szenentyp zu erstellen, eine Szene zu öffnen, ein neues Projekt zu erstellen, etc.