So, ich habe meine Gadgetengine jetzt komplett neu gecodet in C#. Hat auch ein paar (wenige) neue Features, aber vor allem sehen die Gadgets, die mitgeliefert werden, jetzt wesentlich besser aus
Den Downloadlink gibt es hier: sidebar 2.0.rar (29,29 KB)
Bugs bitte melden. Alte Gadgets sind nicht mehr kompatibel, da das .NET-Framework da Vorgaben setzt.
Nochmal was allgemeines: Das Ziel der Engine ist es, die Gadgets so weit wie möglich vom Programm zu trennen. Die Gadgets haben ein eigenes Einstellungsmanagement. Das heißt, sie bekommen von der Engine den Befehl, die Einstellungen anzuzeigen und sie machen das auch (hoffentlich). Um das Speichern der Einstellungen brauchen die Gadgets sich jedoch weniger Gedanken zu machen.
Ein Gadget ist eine Klassenbibliothek, die folgende Assemblies braucht: System.Windows.Forms und CSSidebarInterface.dll.
Der VB .NET Code für Gadgets wäre dann folgender: (Ins Tutorial der ersten Version schauen, falls Probleme auftauchen)
Gadget ohne Einstellungen:
Das Gadget ohne Einstellungen braucht einfach nur ein UserControl. Im folgenden heißt das Teil UserControl 1.
Public Class Class1
Implements CSSidebarInterface.SidebarInterface
Dim ucontr As UserControl1 = New UserControl1
Public ReadOnly Property author() As String Implements CSSidebarInterface.SidebarInterface.author
Get
Return "DeinName"
End Get
End Property
Public ReadOnly Property hasSettings() As Boolean Implements CSSidebarInterface.SidebarInterface.hasSettings
Get
Return False
End Get
End Property
Public Function initialize() As System.Windows.Forms.UserControl Implements CSSidebarInterface.SidebarInterface.initialize
Return ucontr
End Function
Public ReadOnly Property name() As String Implements CSSidebarInterface.SidebarInterface.name
Get
Return "GadgetName"
End Get
End Property
Public Property settings() As String Implements CSSidebarInterface.SidebarInterface.settings
Get
Return Nothing
End Get
Set(ByVal value As String)
End Set
End Property
Public Sub showSettings() Implements CSSidebarInterface.SidebarInterface.showSettings
End Sub
Public ReadOnly Property version() As String Implements CSSidebarInterface.SidebarInterface.version
Get
Return "GadgetVersion"
End Get
End Property
End Class
Alles anzeigen
Gadget mit Einstellungen
Das Gadget mit Einstellungen ist ein Gadget mit zusätzlichem Einstellungsdialog. Im folgenden Form1. Diese Form1 hat noch eine globale Variable, die die Instanz des Gadget-Controls aufnimmt. Ist besser, damit die Settings am Ende zum richtigen Gadget kommen
Und jetzt zur Klasse des Gadgets:
Public Class Class1
Implements CSSidebarInterface.SidebarInterface
Dim ucontr As UserControl1 = New UserControl1
Public ReadOnly Property author() As String Implements CSSidebarInterface.SidebarInterface.author
Get
Return "DeinName"
End Get
End Property
Public ReadOnly Property hasSettings() As Boolean Implements CSSidebarInterface.SidebarInterface.hasSettings
Get
Return True 'Settings-Button am Gadget anzeigen lassen von der Engine
End Get
End Property
Public Function initialize() As System.Windows.Forms.UserControl Implements CSSidebarInterface.SidebarInterface.initialize
Return ucontr
End Function
Public ReadOnly Property name() As String Implements CSSidebarInterface.SidebarInterface.name
Get
Return "GadgetName"
End Get
End Property
Public Property settings() As String Implements CSSidebarInterface.SidebarInterface.settings
Get
Return "Ein String mit den Einstellungen die das Gadget speichern will..."
'Wenn man die Variablen di und ngs speichern will, kann man z.B. 'di@ngs' zurückgeben.
End Get
Set(ByVal value As String)
'Hier muss der Code hin, damit das Gadget die Einstellungen übernimmt.
'z.B. kann ankommen 'di@ngs' und das Gadget splittet an dem @ und verarbeitet die Strings weiter.
End Set
End Property
Public Sub showSettings() Implements CSSidebarInterface.SidebarInterface.showSettings
Dim settings As Form1 = New Form1
settings.Show()
End Sub
Public ReadOnly Property version() As String Implements CSSidebarInterface.SidebarInterface.version
Get
Return "GadgetVersion"
End Get
End Property
End Class
Alles anzeigen
Wer das ganze von Anfang an selbst bauen will, der schreibt einfach unter das Public Class Class 1 folgendes:
Und VB sollte das "automatisch" implementieren, vorrausgesetzt CSSidebarInterface.dll und System.Windows.Forms sind importiert.
Auf Anfrage auch Tutorial für C#
So, ich hoffe, es sind keine Fehler drin und in diesem Sinne: Happy using and bugtesting
EDIT Nr. 1:
So, auf speziellen Wunsch hin eine neue Version. Beim Minimieren wird die Form versteckt. Bei erneutem Starten der exe wird sie wieder angezeigt. BTW: Ich merke grade, dass das Icon verschwunden ist. Kommt bald wieder
Siehe unten.
EDIT Nr. 2:
Bugfix-Release. Icon ist auch wieder da.
sidebar 2.0.rar (30,30 KB)
EDIT Nr. 3:
Neues Gadget: Kalender. Download:
Calendar.gadget.dll (20,48 KB)
EDIT Nr. 4:
Währungsrechner und Screen: siehe unten.
Auf besonderen Wunsch hin gibt es hier ein Tutorial für C#:
Also. Wir erstellen eine neue Klassenbibliothek mit dem Namen xyz.gadget. In diesem Beispiel tutorial.gadget. Dann importieren wir die Verweise System.Windows.Forms und den Verweis auf die CSSidebarInterface.dll. Nun öffnen wir die Klasse unserer Klassenbibliothek. Wir sollten folgendes Bild haben:
using System;
using System.Collections.Generic;
using System.Text;
namespace tutorial.gadget
{
public class Class1
{
}
}
Alles anzeigen
Das ganze verändern wir: Wir fügen hinter das Class 1 einen Doppelpunkt ein und ein Leerzeichen. (In dieselbe Zeile wie Class1!) Dann schreiben wir CSSidebarInterface.SidebarInterface ein und drücken Enter. Daraufhin sollte die IDE bei CSSidebarInterface ein blaues Kästchen anzeigen. Wenn wir die Maus darauf bewegen können wir in dem Menü, was erscheint CSSidebarInterface.SidebarInterface-Schnittstelle implementieren auswählen und die IDE implementiert den Kram. Dabei hagelt es für die Engine einige Exceptions, was uns nicht weiter stören sollte. Man sollte nun folgendes Bild haben:
using System;
using System.Collections.Generic;
using System.Text;
namespace tutorial.gadget
{
public class Class1 : CSSidebarInterface.SidebarInterface
{
#region SidebarInterface Member
public string author
{
get { throw new Exception("The method or operation is not implemented."); }
}
public bool hasSettings
{
get { throw new Exception("The method or operation is not implemented."); }
}
public System.Windows.Forms.UserControl initialize()
{
throw new Exception("The method or operation is not implemented.");
}
public string name
{
get { throw new Exception("The method or operation is not implemented."); }
}
public string settings
{
get
{
throw new Exception("The method or operation is not implemented.");
}
set
{
throw new Exception("The method or operation is not implemented.");
}
}
public void showSettings()
{
throw new Exception("The method or operation is not implemented.");
}
public string version
{
get { throw new Exception("The method or operation is not implemented."); }
}
#endregion
}
}
Alles anzeigen
So, jetzt müssen wir das ganze erstmal auf unsere Bedürfnisse zuschneiden.
1.) Gadget ohne Einstellungsdialog
Wir fügen dem Projekt ein neues UserControl hinzu, im folgenden heißt das Teil UserControl1. Folgenden Code können wir für unsere Gadgets nutzen:
Spoiler anzeigen
using System;
using System.Collections.Generic;
using System.Text;
namespace tutorial.gadget
{
public class Class1 : CSSidebarInterface.SidebarInterface
{
UserControl1 control = new UserControl1();
#region SidebarInterface Member
public string author
{
get { return "hierDeinName"; }
}
public bool hasSettings
{
get { return false; }
}
public System.Windows.Forms.UserControl initialize()
{
return control;
}
public string name
{
get { return "hierDeinGadgetName"; }
}
public string settings
{
get
{
return null;
//Wer will, kann hier auch einen String zurückgeben, der ihm unten wieder zurückgegeben wird, wenn das Gadget geladen wird.
}
set
{
//siehe oben.
}
}
public void showSettings()
{
}
public string version
{
get { return "hierDeineVersionsNummer"; }
}
#endregion
}
}
Alles anzeigen
Das Gadget sollte nach Möglichkeit eine andere Hintergrundfarbe als die Standardfarbe haben, da diese transparent wird (.NET-Framework-bedingt).
2.) Gadget mit Einstellungsdialog.
Wir ändern das ganze einfach so ab, dass bei hasSettings true zurückgegeben wird. Bei void showSettings() sollte dann die Settings-Form (hier: setForm) angezeigt werden. Diese sollte auch eine Instanz des Gadgets haben:
Die form wird also so aufgerufen:
setForm settings = new setForm();
public void showSettings()
{
setForm.gadget = this;
setForm.Show();
}
Jetzt kompilieren, in den Gadgets-Ordner und ab geht die Post!
So, bei C# auch: Ich hoffe, dass es geht. Wenn nicht, bitte schreiben.