Es Funktioniert!! Danke ![]()
Also lag es daran, dass ich über Visual Studio beim Debuggen nur die LumosGUI.exe aufrufe und demnach nicht die Einstellungen aus dem Kernel abgerufen werden können. Wenn ich DMXControl ohne VisualStudio aufrufe, wird automatisch der Kernel gestartet und demnach hat es funktioniert.
Da ich jetzt alles über GuiSettings mache, funktioniert es auch beim Debuggen.
Posts by PhiWue
-
-
Hallo Soon,
sorry für die späte Antwort, ich bin leider nicht eher dazu gekommen.
Wo finde ich denn die ApplicationSettings.xml? Habe jetzt einfach mal DMX-Control deinstalliert und wieder neu installiert. Demnach müsste ja alles resettet sein und beim Anlegen der Einstellung diesmal ein bool Wert gesetzt werden. Trotzdem habe ich den gleichen Fehler. Ohne Debugging und Start über Visual Studio funktioniert es, anderenfalls nicht.
Zudem wundert mich folgendes:
Ich muss in dem Programm ja überprüfen, ob diese Einstellung überhaupt angelegt wurde. Dafür habe ich in einer if-loop nach der Neuinstallation mir einfach mal den
Wert der theoretisch noch nicht existierenden Einstellung ausgeben lassen:
Codevar test2 = SettingsManager.getInstance().getSetting<bool>(ESettingsType.APPLICATION, "SchedulerAutoRun.SETTING"); MessageBox.Show(test2.ToString());Hast du eine Idee, warum da "True" ausgegeben wird?
Bzgl StackTrace:
Habe einen Break-Point vor die Setting-Abrage gesetzt und die Aufrufliste kopiert. Meinst du das?Code
Display More> SchedulerPlugin.dll!SchedulerPlugin.SchedulerForm.button1_Click(object sender, System.EventArgs e) Zeile 254 C# System.Windows.Forms.dll!System.Windows.Forms.Control.OnClick(System.EventArgs e) Unbekannt System.Windows.Forms.dll!System.Windows.Forms.Button.OnClick(System.EventArgs e) Unbekannt System.Windows.Forms.dll!System.Windows.Forms.Button.OnMouseUp(System.Windows.Forms.MouseEventArgs mevent) Unbekannt System.Windows.Forms.dll!System.Windows.Forms.Control.WmMouseUp(ref System.Windows.Forms.Message m, System.Windows.Forms.MouseButtons button, int clicks) Unbekannt System.Windows.Forms.dll!System.Windows.Forms.Control.WndProc(ref System.Windows.Forms.Message m) Unbekannt System.Windows.Forms.dll!System.Windows.Forms.ButtonBase.WndProc(ref System.Windows.Forms.Message m) Unbekannt System.Windows.Forms.dll!System.Windows.Forms.Button.WndProc(ref System.Windows.Forms.Message m) Unbekannt System.Windows.Forms.dll!System.Windows.Forms.Control.ControlNativeWindow.OnMessage(ref System.Windows.Forms.Message m) Unbekannt System.Windows.Forms.dll!System.Windows.Forms.Control.ControlNativeWindow.WndProc(ref System.Windows.Forms.Message m) Unbekannt System.Windows.Forms.dll!System.Windows.Forms.NativeWindow.DebuggableCallback(System.IntPtr hWnd, int msg, System.IntPtr wparam, System.IntPtr lparam) Unbekannt [Übergang von Nativ zu Verwaltet] [Übergang von Verwaltet zu Nativ] System.Windows.Forms.dll!System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(System.IntPtr dwComponentID, int reason, int pvLoopData) Unbekannt System.Windows.Forms.dll!System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(int reason, System.Windows.Forms.ApplicationContext context) Unbekannt System.Windows.Forms.dll!System.Windows.Forms.Application.ThreadContext.RunMessageLoop(int reason, System.Windows.Forms.ApplicationContext context) Unbekannt System.Windows.Forms.dll!System.Windows.Forms.Application.Run(System.Windows.Forms.Form mainForm) Unbekannt LumosGUI.exe!Lumos.GUI.Program.runGui() Zeile 177 C# LumosGUI.exe!Lumos.GUI.Program.Main(string[] param) Zeile 143 C# -
Die Einstellung die ich gesetzt habe, kann ich nach einem Neustart von DMX-Control aufrufen (Siehe Quellcode button1_Click() ). Allerdings stürzt das Programm ab, wenn ich mir die Einstellung schon im Konstruktor der SchedulerForm (Hauptfenster) holen möchte (Quellcode SchedulerForm() ).
Wieso ist das so? Bzw.: Wie soll ich damit am Besten umgehen? Die SchedulerForm() wird in der initializePlugin()-Methode aufgerufen. Wenn ich mir die Einstellung in einer dieser Methoden holen möchte, kann ich das PlugIn nicht mehr starten (wahrscheinlich weil die Initiailisierung nicht klappt)Ich möchte, dass die CheckBox direkt beim Start des PlugIns den vorher gesetzten Wert bekommt und auch entsprechend die anderen Klassenbibliotheken diese Einstellung aufrufen können, damit bspw. die gesetzten Termine die Lichtszenen auch ohne manuellen Aufruf des PlugIns starten.
Code
Display Morepublic SchedulerForm() { InitializeComponent(); //Define in which Menu the window will be displayed this.MainFormMenu = MenuType.Windows; //Defining TabText for DMX Control Plugin this.TabText = "Scheduler Plug In"; /* Später noch prüfen, ob Einstellung schon erzeugt wurde, wenn nicht, muss die Einstellung erst erzeugt werden */ IsRunning = SettingsManager.getInstance().getSetting<bool>(ESettingsType.APPLICATION, "SchedulerAutoRun.SETTING"); chkbox_isSchedulerRunning.Checked = IsRunning; AppointmentList.Instance.changed += Instance_changed; } -
Dein Code in der chkbox_isSchedulerRunning_CheckedChanged sollte funktionieren. Aktuell schreibt er den Wert "17" und liest diesen auch wieder, oder geht das nicht?
Ich habe jetzt meinen "Fehler" gefunden. Ich kann das anscheinend nicht über den Debugger in VisualStudio testen, denn dieser meldet einen Crash in folgender Zeile:
CodeSettingsManager.getInstance().setSetting(ESettingsType.APPLICATION, "SchedulerAutoRun.SETTING", 17);Wenn ich eine MessageBox nutze und DMX-Control ohne VisualStudio starte, erscheint die magische 17!

-
Im Hauptfenster vom Scheduler soll eine Checkbox vorhanden sein, mit welcher ich den Scheduler an-/ausschalten kann. Diese Information soll als Einstellung in DMXControl vorliegen, sodass der Scheduler beim Start von DMXControl automatisch läuft oder halt nicht (abh. vom Status der CheckBox). Momentan wollte ich erstmal probieren, ob ich überhaupt eine neue Einstellung "SchedulerAutoRun" in der Kategorie "General" hinzufügen und entsprechend beschreiben/auslesen kann.
Das Programm stürzt in der initializePlugin() Methode nicht ab, allerdings finde ich auch nicht die Einstellung im Reiter Settings-General.
Wenn ich dann über das chkbox_isSchedulerRunning_CheckedChanged-Event einen neuen Wert setzen möchte, passiert nichts.
-
Hallo Soon,
habe das Anlegen der eigenen Kategorie erstmal auskommentiert. Die SettingsMetadata liegt jetzt auch im initializePlugin().
Da liegt bei mir momentan auch noch das Problem. Bei mir klappt das Hinzufügen der neuen Einstellung in einer verfügbaren Kategorien nicht.
Woher weiß ich denn, wie intern der Name bzw. die Zugriffs UID der SettingsNode lautet? Das bräuchte ich doch, oder?SchedulerPlugin.cs
Codeprotected override void initializePlugin() { this._mySchedulerForm = new SchedulerForm(); var metadata = new SettingsMetadata(ESettingsRegisterType.APPLICATION, "<General>", "<SchedulerAutoRun>", "<SchedulerAutoRun.SETTING>", "<AutoRun Scheduler>", null); metadata.Min = 0; metadata.Max = 20; SettingsManager.getInstance().registerGuiSetting(metadata, 1); }Und dann entsprechend bei SchedulerForm.cs
Codeprivate void chkbox_isSchedulerRunning_CheckedChanged(object sender, EventArgs e) { // Read and Write of Settings SettingsManager.getInstance().setSetting(ESettingsType.APPLICATION, "SchedulerAutoRun.SETTING", 17); var test = SettingsManager.getInstance().getSetting<int>(ESettingsType.APPLICATION, "SchedulerAutoRun.SETTING"); }Vielen Dank für deine Hilfe und natürlich auch für die Glückwünsche

-
Hallo alle,
momentan bekomme ich das irgendwie nicht zum Laufen, vielleicht mache ich etwas elementares falsch und einer von euch kann mir helfen
Ich habe innerhalb meiner GUI für das PlugIn eine Checkbox, welche einstellen soll, ob der Scheduler an/aus ist (später soll also die Einstellung bool als value haben, fürs erste wollte ich aber überhaupt mal irgendeine Einstellung setzen können)Code
Display Moreprivate void chkbox_isSchedulerRunning_CheckedChanged(object sender, EventArgs e) { //IN this example I am registering an Integer Setting which is Application specific and can range from 0 > 20. var metadata = new SettingsMetadata(ESettingsRegisterType.APPLICATION, "<SchedulerPlugin>", "<SettingName>", "<SchedulerPlugin.SETTING>", "<Description>", null); /* * The last parameter is "List of Values in case Value Type is an EnumType, otherwise null". * As we want to register an int, it is null */ metadata.Min = 0; metadata.Max = 20; SettingsManager.getInstance().registerSetting(metadata, 1); //The last parameter is the initial Value and also describes the Type we want to have. If we wanted to register a "String" Setting, we would simply provide a String Value as last Parameter // Read and Write of Settings SettingsManager.getInstance().setSetting(ESettingsType.APPLICATION, "SchedulerPlugin.SETTING", 17); var value = SettingsManager.getInstance().getSetting<int>(ESettingsType.APPLICATION, "SchedulerPlugin.SETTING"); }Zusätzlich möchte ich in der PlugIn-Klasse entsprechend beim Start von DMX die Einstellungen initialisieren:
Code
Display Moreprotected override void initializePlugin() { this._mySchedulerForm = new SchedulerForm(); //In der Gui in der Init Methode des GUI Plugins var myPluginNode = new ConfigurableSettingsNode("Settings:SchedulerPlugin", "SchedulerPlugin", "SchedulerPlugin.png"); //Image File must be placed in Kernel or GUI Symbols Folder and should be of Size 32x32 var branchId = SettingsManager.getInstance().GetSettignsBranchID(); var branch = PEManager.getInstance().GetBranchByID(branchId); //Add Node to Branch branch.AddRecursive(branch.ID, myPluginNode); //Now you have a node and all Settings in Category "SchedulerPlugin" will be shown there } SchedulerPlugin.png habe ich schnell mit Paint 32 * 32 Pixel erstellt (Anhang) und in den Plugin/GUI/Symbols Ordner gelegt. Beim Versuch des Debuggens stelle ich fest, dass alle Elemente im Reiter Settings/Settings weg sind (irgendwas klappt also meiner Meinung nach bei der Registrierung/Initialisierung der Einstellung nicht) Anbei sind auch noch die Logs. In DMX wird auch folgende Fehlermeldung angezeigt: "Error when refreshing list ... Lumos.GUI.Windows.Settings.SettingsView" Liebe Grüße, Danke und schönes Wochenende! -
-
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! -
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 GUIDSchedulerPlugin.cs
C#
Display Moreusing System; using System.Collections.Generic; using System.Linq; using System.Text; using Lumos.GUI; using Lumos.GUI.Plugin; using LumosLIB.Kernel.Log; namespace SchedulerPlugin { public class SchedulerPlugin : GuiPluginBase { /// <summary> /// Every Plugin has a unique ID /// </summary> const string PLUGIN_ID = "{37C2CA96-3543-4FD7-B88C-65783A7E5A62}"; /// <summary> /// A logger to write Logfiles /// </summary> private static readonly ILumosLog log = LumosLogger.getInstance<SchedulerPlugin>(); private SchedulerForm _mySchedulerForm; public SchedulerPlugin() : base(PLUGIN_ID, "Scheduler Plugin") { } /// <summary> /// Called when Plugin is initialized (on Startup) /// </summary> protected override void initializePlugin() { this._mySchedulerForm = new SchedulerForm(); } /// <summary> /// Called when Plugin is disabled /// </summary> protected override void shutdownPlugin() { //Hide Form _mySchedulerForm.Hide(); //Remove Form, so it is not visible any more WindowManager.getInstance().RemoveWindow(_mySchedulerForm); } /// <summary> /// Called when Plugin is activated (enabled in PluginManager) /// </summary> protected override void startupPlugin() { //Add Form WindowManager.getInstance().AddWindow(_mySchedulerForm); } } }SchedulerForm.cs
C#
Display Moreusing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Lumos.GUI; using Lumos.GUI.BaseWindow; using LumosLIB.GUI.Windows; using WeifenLuo.WinFormsUI.Docking; using SchedulerAppointment; using System.IO; using System.Xml.Serialization; namespace SchedulerPlugin { public partial class SchedulerForm : ToolWindow { public SchedulerForm() { InitializeComponent(); //Define in which Menu the window will be displayed this.MainFormMenu = MenuType.Windows; //Defining TabText for DMX Control Plugin this.TabText = "Scheduler Plug In"; AppointmentList.Instance.changed += Instance_changed; } ... hier Quellcode für alle buttons und Co ...}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.
-
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 -
Wir schreiben das Plugin für die GUI. Hatte ganz am Anfang die dll in beide Ordner gelegt. Habe diese jetzt aus dem Kernel Ordner entfernt.
Das Problem ist aber immernoch vorhanden. Hast du noch eine andere Idee?
Anbei die neuen LogFiles.
Danke für die Hilfe! -
Hallo Soon,
gern! -
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 -
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!
Code
Display Morepublic SchedulerForm() { InitializeComponent(); //Define in which Menu the window will be displayed this.MainFormMenu = LumosLIB.GUI.Windows.MenuType.Windows; //Defining TabText for DMX Control Plugin this.TabText = "Scheduler Plug In"; this.Shown += SchedulerForm_Shown; } private void SchedulerForm_Shown(object sender, EventArgs e) { this.DockState = DockState.Float; } -
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