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.
Code:
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
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
Code:
Public gadget As UserControl1
Und jetzt zur Klasse des Gadgets:
Code:
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
Wer das ganze von Anfang an selbst bauen will, der schreibt einfach unter das Public Class Class 1 folgendes:
Code:
Implements CSSidebarInterface.SidebarInterface
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:
Code:
using System;
using System.Collections.Generic;
using System.Text;
namespace tutorial.gadget
{
public class Class1
{
}
}
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:
Code:
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
}
}
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:
Code:
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
}
}
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:
Code:
public UserControl1 gadget;
Die form wird also so aufgerufen:
Code:
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.
(Dieser Beitrag wurde zuletzt bearbeitet: 26.12.2008 21:58 von huttERic.)
26.12.2008 16:31
Alex
Registriert seit 17.04.06
Beiträge: 6.619
Registriert seit: Jul 2008
Okay, C# Anleitung gibt es nachher
Nen kurzer Screen, um meine bisherigen Gadgets zu zeigen:
Das Währungsrechner-Teil aktualisiert die Kurse immer mit denen der Europäischen Zentralbank. wie man sieht sehen auch alle meine Gadgets mehr oder weniger einheitlich aus
Wer den Währungsumrechner haben will: Wechselkurse.gadget.dll (32,77 KB)
Pac-Man schrieb: Ich dachte da kommen jetzt alphatransparente Gadgets...
so hättste auch bei VB bleiben können
Alphatransparenz geht afaik mit dem .NET-Framework nicht. Und falls du bei Version 1 bleiben meintest: Nur die Version 2.0 wird noch weiterentwickelt Kriegt demnächst coole neue Features.
26.12.2008 23:43
Alex
Registriert seit 17.04.06
Beiträge: 6.619
Registriert seit: Jul 2008