Entwicklung Scheduler Plugin

  • Hallo Community,

    im Rahmen eines Programmierprojektes möchten wir ein Scheduler Plugin für DMXControl3 programmieren. Der Scheduler soll bestimmte Lichtszenen aus DMXControl zu vom Nutzer definierten Terminen starten können. Die Termine sollen über eine GUI erstellt werden.

    Soweit so gut:
    Fürs erste habe ich versucht den ersten groben Entwurf der GUI in DMXControl anzeigen lassen zu können. Dafür habe ich mich am Kerne Cloud Plugin orientiert. Ich kann das Scheduler Plugin nun auch über das Plugin Management laden. Allerdings kann ich unter dem Reiter "Window" die GUI nicht auswählen. Genau das gleiche Problem habe ich aber auch beim Kernel Cloud Plugin.

    Habt ihr hierfür vielleicht einen Tipp für mich, wie ich eine einfache GUI (erstellt mit Windows Forms) in DMXControl laden kann? Ich hatte gehofft, dass das beim Kernel Cloud Plugin funktioniert, evt. ist das ja normalerweise auch so und ich vergesse nur was.

    Danke im Vorraus,
    Philipp

  • Soon5

    Approved the thread.
  • Hy,


    Damit dein Form in der Menüleiste erscheint, musst du folgendes tun:


    • Dein Form muss von ToolWindow erben (siehe KernelCloudForm)
    • Du musst einen Tab Text definieren (siehe KernelCloudForm)
    • Du musst MainFormMenu = LumosLIB.GUI.Windows.MenuType.Windows; (siehe KernelCloudForm)

    Damit ist mit dem Form alles klar, damit das Form im WindowManager bekannt ist muss es noch mit

    • WindowManager.getInstance().AddWindow(_form);

    Registriert werden.


    Wenn du das alles so gemacht hast, ist ein Grund, dass das Form nicht geladen werden konnte. Evtl. fehlt eine Referenz auf eine DLL. Siehst du in den Log Files irgendwelche Exceptions?


    EDIT: Das KernelCloudPlugin ist im "Connection" Bereich zu finden, nicht bei "Windows"

  • Hey Soon,vielen Dank für die schnelle Antwort!


    Ich hatte den falschen MenuType und zusätzlich die Funktion SchedulerForm_Shown() nicht implementiert. Aber jetzt läuft es!



  • Der "Shown" Event Handler sollte nur notwendig sein, wenn du willst dass das Plugin nach dem öffnen als Floating Window angezeigt wird. Für das Scheduler Plugin würde ich das nicht machen, da soll sich das Fenster ja in die Docking Struktur einfügen. Ist denke ich von der Usability besser, aber das sind schon Optimierungen.


    Wenn du sonst noch fragen hast, melde dich einfach.

  • Hallo Community,

    bevor ich mein momentanes Problem beschreibe, ein kleiner Statusbericht:
    Außerhalb von DMXControl können jetzt Termine erstellt, editiert, gelöscht, geladen und gespeichert (XML) werden. Und so langsam bauen wir die einzelnen Projektteile zusammen. Es geht also vorran!




    Da ich nun den aktuellen Stand mal in DMX Control ausprobieren wollte, bin ich direkt auf das erste Problem gestoßen: die Buttons funktionieren nicht. Muss ich bei den Buttons innerhalb der GUI in DMXControl irgendwas beachten?

    Das sind die Fehler in DMXControl:


    Innerhalb der SchedulerPlugin.dll befinden sich zwei Formulare
    SchedulerForm.cs und AppointmentForm.cs
    SchedulerForm ist das Startformular und dieses wird auch erfolgreich in DMXControl geladen. Wenn der Button "Add" gedrückt wird, soll AppointmentForm geladen werden (ShowDialog() )


    Dankeschön im Vorraus,

    Philipp

    Code
    // Code in SchedulerForm
    private void btn_addAppointment_Click(object sender, EventArgs e)
            {
                new AppointmentForm().ShowDialog();
            }
  • Schreibt ihr ein Plugin für die GUI oder den Kernel? Ich vermute für die GUI, aber anscheinend habt ihr das kompilierte Plugin in das Kernel Verzeichnis gepackt. Der meckert jetzt natürlich, dass er Dateitypen aus der GUI nicht findet.

  • Hallo Soon,

    also wenn ich das Projekt innerhalb von Visual Studio lade und starte (ohne DMX Control), dann werden auch die Events durch die Buttons entsprechend ausgelöst. Wie kann man denn Debuggen, während DMXControl läuft? Ich hatte einen Tipp bekommen, wie man DMXControl von VisualStudio aus starten kann (Properties -> Buildereignisse und dann ein Postbuildereignis hinzufügen). Das bekomme ich aber derzeit nicht zum Laufen. Ist das der richtige Ansatz?

    Lg
    Philipp

  • Nein. Es gibt in Visual Studio bei den Debug Einstellungen die Option "Externes Programm starten". Da trägst du die LumosGUI.exe ein, und dann kannst du einen Breakpoint ganz normal in deinem Projekt setzen. Am besten mal mit einer Funktion testen die sicher aufgerufen wirt (initialize) oder so.

  • Hallo Soon,
    also das Debuggen von Visual Studio aus klappt jetzt bei mir einwandfrei beim KernelCloud PlugIn. Komischerweise habe ich seit gestern das Problem, dass ich den Scheduler nicht mehr im PlugIn Manager sehe, obwohl ich in meiner Erinnerung keine Änderung an der SchedulerPlugin.cs vorgenommen habe. Auch wenn ich eine dll aus einem älteren Stand meines Repositories nutze, funktioniert es nicht mehr ... . Über deinen Tipp mit dem Debugger wird immerhin die Methode initializePlugin() in SchedulerPlugin.cs aufgerufen. Mehr passiert dann aber nicht.
    Hast du eine Idee, an was das liegen könnte?
    Bisher habe ich folgendes probiert:
    - Projekt aus vorherigem (noch funktionierendem) Stand geladen und dll erstellt
    - DMXControl deinstalliert und neu installiert
    - Vergleich Zeile für Zeile mit dem KernelCloud
    - Überprüfung Properties ( .Net 4, Klassenbibliothek, Verweispfade GUI)
    - neue GUID


    SchedulerPlugin.cs

    SchedulerForm.cs


    Die größte Änderung, die ich gestern vorgenommen habe war, dass ich aus dem Kernel und GUI Ordner meine dll's gelöscht habe. Sogar wenn ich die gelöschten dll's im Papierkorb wiederherstelle, funktioniert es nicht.


    Vielleicht hast du ja noch einen Tipp.

  • Also ich habe jetzt die Lösung meines Problems gefunden!
    Ich hatte im Quelltext über using eine Bibliothek benutzt, deren dll ich aber nicht in den GUI/PlugIn - Ordner gelegt habe!

    Jetzt funktionieren auch alle Buttons und ich kann ordentlich debuggen! ;)

    Dankeschön für die deine Hilfe mit dem Debugger!

  • Newly created posts will remain inaccessible for others until approved by a moderator.

    The last reply was more than 365 days ago, this thread is most likely obsolete. It is recommended to create a new thread instead.